亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

VBA中的AndAlso / OrElse

VBA中的AndAlso / OrElse

子衿沉夜 2019-11-19 10:22:32
我正在嘗試通過執行以下操作在Excel宏中使用'And'進行惰性評估:If Not myObject Is Nothing *And* myObject.test() Then    'do something'Else    'do something else'End If我知道VB.NET中存在惰性評估AndAlso,OrElse但是在VBA中找不到類似的評估。如果VBA中不存在惰性評估,那么構造代碼的最佳方法是什么,以便它將評估我期望的方式?
查看完整描述

3 回答

?
慕標5832272

TA貢獻1966條經驗 獲得超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


查看完整回答
反對 回復 2019-11-19
?
RISEBY

TA貢獻1856條經驗 獲得超5個贊

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


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語句來替代,我認為這是可以使用的解決方案。


查看完整回答
反對 回復 2019-11-19
?
瀟湘沐

TA貢獻1816條經驗 獲得超6個贊

或者,您可以創建一個將對象作為參數并返回布爾值的函數。那就是我通常的目的。



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


查看完整回答
反對 回復 2019-11-19
  • 3 回答
  • 0 關注
  • 783 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號