С заявлениями после функций - PullRequest
1 голос
/ 12 июня 2019

Я нахожусь в процессе переключения моего кода с использования .active и .select на что-то более надежное по рекомендации Интернета.Мне было интересно узнать о функциональности операторов with и следуют ли они за созданной функцией.

'---Which way is more proper? 
'1.
Sub TestCase()
  With ThisWorkbook.Worksheets("TestWorksheet")
    TestFunction()
  End With
End Sub

Function TestFunction()As Integer
  Dim I As Integer
  I = .cells(1,1)
End function
'--2.
Sub TestCase()
  With ThisWorkbook.Worksheets("TestWorksheet")
    TestFunction()
  End With
End Sub

Function TestFunction()As Integer
  Dim I As Integer
  With ThisWorkbook.Worksheets("TestWorksheet")
    I = .cells(1,1)
  End With 
End function

Ответы [ 2 ]

3 голосов
/ 12 июня 2019

К сожалению, операторы 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 для переданного аргумента.

2 голосов
/ 12 июня 2019

Самое правильное (основываясь на очень правильном комментарии @ BigBen):

Sub TestCase()  
    'Integer variable to catch the return of the function
    Dim somVar as Integer

    'Call the function, pass the worksheet. 
    somVar = TestFunction(ThisWorkbook.Worksheets("TestWorksheet"))  

    'Do something with the return
    Debug.print somVar
End Sub

Function TestFunction(ws as Worksheet) As Integer
  Dim I As Integer  
  I = ws.cells(1,1) 

  'Return the integer to the caller 
  TestFunction = I
End function
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...