Function Foo(thiscell As Range) As Boolean
Foo = thiscell.hasFormula And (InStr(1, UCase(Split(thiscell.formula, Chr(40))(0)), "bar") > 0)
End Function
該功能之前(當第一個參數爲假時,VBA「和」運算符是否會評估第二個參數?
我在使用是麻煩時,傳遞到該函數的單元是空的殼體存在,以測試特定子串的存在(欄,在這種情況下) ,thisCell.hasFormula是錯誤的,但是在和之後的語句仍然被評估,這給我一個下標超出了運行時的範圍錯誤
是否VBA實際上繼續評估第二個參數和,首先是假的?
請注意,VBA的'And'運算符不會短路,因爲它是*位運算符而不是*邏輯*運算符。請參閱:http://stackoverflow.com/questions/8042744/excel-vba-instr-condition-doesnt-work-with-2-or-more-conditions/8047021#8047021 – jtolle
@jtolle不正確 - 它將返回一個布爾值如果它的參數是布爾值,那麼它支持按位和邏輯運算。 (當然,你可能會認爲邏輯是一種使用1位整數的特殊情況,但重點是如果他們選擇微軟可能會支持短路) –
@Hugh,有趣。我一直假設'And'只是一個按位運算符,儘管模擬邏輯運算是因爲'True = -1'和'False = 0'。但是你是對的,如果傳遞給它的表達式都是布爾型的,則'*'是一個邏輯運算符。如果一個或兩個操作數都是數字,它只是按位進行的。但我想它不能短路,因爲無論如何都必須對兩個表達式進行評估,以確保其中一個或兩個不是數字而不是布爾值。所以我認爲「比特級」仍然會導致這裏沒有短路。 – jtolle