VBA中ByVal和ByRef的区别
2020-05-27 本文已影响0人
欺枫
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