К сожалению, операторы With
не следуют за вызываемыми функциями. Для этой функции вам нужно передать аргумент функции. Вот пример, который корректно копирует предоставленный вами псевдо-код:
Sub TestCase()
MsgBox TestFunction(ThisWorkbook.Worksheets("TestWorksheet"))
End Sub
Function TestFunction(ByRef ws As Worksheet) As Double
With ws
TestFunction = Val(.Cells(1, 1).Value)
End With
End Function
Обратите внимание, что Sub вызывает функцию и передает аргумент, который является объектом рабочего листа. Затем в функции вы можете использовать оператор With
для переданного аргумента.