VBA中ByVal和ByRef的区别

ByVal是by Value, 也就是值传递

ByRef是by Reference,也就是引用传递

在VBA中默认是ByRef


ByVal和ByRef的区别

当使用ByVal的时候,获得的是该变量的值。里面的操作不影响原始变量的值。

可以想象成把该数据复印了一份给别人,但是原始数据依然在你手中。当别人对这个复印件做的任何操作,都不会影响你手中的原始文档。


当使用ByRef的时候,是将这个变量的reference传递过去(可以看作将整个变量传递过去,虽然不准确)。函数过程内可以对变量的值进行修改,修改后在函数过程外也能读取最新的值。

可以理解成你将一份文件的储存钥匙给了别人。当别人利用这个钥匙操作这个文件的时候,必然影响到这份原始文件。


下面是例子:

Function Test1(ByVal a As Long) As Long

    a = a + 1

    Test1 = a

End Function


Function Test2(ByRef a As Long) As Long

    a = a + 1

    Test2 = a

End Function


Function Test3(a As Long) As Long

    a = a + 1

    Test3 = a

End Function


Sub zz()

    Dim i As Long

    i = 10

    MsgBox (Test1(i))

    MsgBox (i)

    MsgBox (Test2(i))

    MsgBox (i)

    MsgBox (Test3(i))

    MsgBox (i)

End Sub


结果是 11, 10, 11, 11, 12, 12



https://www.zhihu.com/question/39120720

https://docs.microsoft.com/en-us/dotnet/visual-basic/programming-guide/language-features/procedures/passing-arguments-by-value-and-by-reference

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容