Я пытаюсь получить отложенные вычисления с 'И' в моем макросе Excel путем выполнения следующего:
If Not myObject Is Nothing *And* myObject.test() Then
'do something'
Else
'do something else'
End If
Я знаю, что отложенные вычисления существуют в VB.NET как AndAlso
и OrElse
но ничто не может найти подобным в VBA. Если отложенные вычисления не существуют в VBA, что лучший способ состоит в том, чтобы структурировать код так, чтобы это оценило способ, которым я ожидаю?
Единственное короткое замыкание (своего рода) происходит в рамках оценки выражения Case
, поэтому следующий неуклюжий оператор делает то, о чем я думаю, вы спрашиваете:
Select Case True
Case (myObject Is Nothing), Not myObject.test()
MsgBox "no instance or test == false"
Case Else
MsgBox "got instance & test == true"
End Select
End Sub
If Not myObject Is Nothing Then
If myObject.test() Then
'do something'
End If
Else
'do something else'
End If
Думаю, так и надо делать.
Редактировать
Может быть так
Dim bTestsFailed as Boolean
bTestsFailed = False
If Not myObject Is Nothing Then
If myObject.test() Then
'do something'
Else
bTestsFailed = True
End If
Else
bTestsFailed = True
End If
If bTestsFailed Then
'do something else
End If
Разве VBA не замечательный?