我正在编写一些VBA,以进一步了解Byref和Byval。这就是我正在使用的:
Private Function Checkcase()
Dim i As Integer
i = 1
Debug.Print i
num(i)
Debug.Print i
End Function
Public Function num(ByRef i As Integer)
i = 5
End Function
输出
1
1
但是,当我在call
前面使用num(i)
关键字时,例如:
call num(i)
输出更改为
1
5
在更改变量i的引用时,我期望两种情况下的输出分别为1和5。
答案 0 :(得分:2)
num(i)
是这里的错误。当您在未获得返回值的情况下调用子函数或函数时,请勿在参数两边加上括号。
当您将带有括号的参数传递给需要ByRef
参数的函数时,这些参数将自动转换为ByVal
。
使用Call num(i)
或删除括号num i
参考文献:Call:
如果省略Call关键字,则还必须省略参数列表周围的括号。