這令人困惑。為什麼不總是使用括號

括號用於包含函式呼叫的引數。將它們用於過程呼叫可能會導致意外問題。

因為它們可以在執行時通過將可能非預期的值傳遞給過程來引入錯誤,並且在編譯時通過簡單地使用無效語法來引入錯誤。

執行

冗餘括號可能會引入錯誤。給定一個將物件引用作為引數的過程…

Sub DoSomething(ByRef target As Range)
End Sub

…並用括號呼叫:

DoSomething (Application.ActiveCell) 'raises an error at runtime

這將引發 Object Required 執行時錯誤#424。在其他情況下可能存在其他錯誤:此處 Application.ActiveCell Range 物件引用正在被評估並按值傳遞,而不管過程的簽名是否指定 target 將通過 ByRef。在上面的片段中傳遞 ByValDoSomething 的實際值是 Application.ActiveCell.Value

括號迫使 VBA 評估括號表示式的值,並將結果 ByVal 傳遞給被呼叫的過程。當評估結果的型別與過程的預期型別不匹配且無法隱式轉換時,會引發執行時錯誤。

編譯時

此程式碼將無法編譯:

MsgBox ("Invalid Code!", vbCritical)

因為表示式 ("Invalid Code!", vbCritical) 無法計算為值。

這將編譯和工作:

MsgBox ("Invalid Code!"), (vbCritical)

但肯定看起來很傻。避免多餘的括號。