vb.net - vb比較 - visual basic學習




並且在VBA中也是/ OrElse (4)

唯一的短路(一種)是在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

我正在嘗試通過執行以下操作在Excel宏中使用“和”進行惰性評估:

If Not myObject Is Nothing *And* myObject.test() Then
    'do something'
Else
    'do something else'
End If

我知道在VB.NET中存在懶惰的評估,如AndAlsoOrElse但在VBA中找不到類似的東西。 如果VBA中不存在延遲評估,那麼構建代碼的最佳方法是什麼,以便評估我期望的方式?


或者您可以創建一個函數,將對像作為參數,並為任一情況返回布爾值。 這就是我通常的意思。

if Proceed(objMyAwesomeObject) then
       'do some really neat stuff here
else
       'do something else, eh
end if
...
end sub

private function Proceed(objMyAwesomeObject as Object)
     if not objMyAweseomeObject is nothing then
            Proceed = true
     elseif objMyAwesomeObject.SomeProperty = SomeValue then
            Proceed = true
     else
            Proceed = false
     endif
end function

這是一個老問題,但這個問題仍然存在並且很好。 我使用過的一種解決方法:

Dim success As Boolean       ' False by default.

If myObj Is Nothing Then     ' Object is nothing, success = False already, do nothing.
ElseIf Not myObj.test() Then ' Test failed, success = False already, do nothing.
Else: success = True         ' Object is not nothing and test passed.
End If

If success Then
    ' Do stuff...
Else
    ' Do other stuff...
End If

這基本上顛倒了原始問題中的邏輯,但是你得到了相同的結果。 我認為這是一個比其他人更簡潔的解決方案,只使用If語句。 使用Select語句的解決方案很聰明,但是如果你想要一個只使用If語句的替代方法,我認為這是一個可以使用的方法。


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不是很棒嗎?





vba