Byref vs Byval VBA的说明

时间:2018-12-14 09:02:22

标签: access-vba

我正在编写一些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。

1 个答案:

答案 0 :(得分:2)

num(i)是这里的错误。当您在未获得返回值的情况下调用子函数或函数时,请勿在参数两边加上括号。

当您将带有括号的参数传递给需要ByRef参数的函数时,这些参数将自动转换为ByVal

使用Call num(i)或删除括号num i

参考文献:Call

  

如果省略Call关键字,则还必须省略参数列表周围的括号。

一如既往,Cpearson site is a must read