当我(对我而言)注意到这种奇怪的行为时,我正在玩一些VBA。我知道默认情况下,Excel VBA通过引用传递参数,因此我希望从两种“调用方式”中,子TestSub
都具有相同的结果。为什么当我用括号调用它时,其行为就像传递了参数ByVal
一样?
我的期望:
TestSub (intSomeNumber) 'prints 15
TestSub intSomeNumber 'prints 15
现实:
TestSub (intSomeNumber) 'prints 10
TestSub intSomeNumber 'prints 15
代码如下:
Sub Macro_1()
Dim intSomeNumber As Integer: intSomeNumber = 10
' If i'll call TestSub without parenthesis
' the value of intSomeNumber will be changed to 15 as expected
TestSub intSomeNumber
' If i'll call TestSub with parenthesis
' the value won't change, so the result printed via Debug.Print will be 10
'TestSub (intSomeNumber)
Debug.Print CStr(intSomeNumber)
End Sub
Private Sub TestSub(argIntSomeNumber As Integer)
argIntSomeNumber = 15
End Sub