美文网首页电脑办公
VBA中ByVal和ByRef的区别

VBA中ByVal和ByRef的区别

作者: 欺枫 | 来源:发表于2020-05-27 18:01 被阅读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

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

相关文章

网友评论

    本文标题:VBA中ByVal和ByRef的区别

    本文链接:https://www.haomeiwen.com/subject/mycgahtx.html