And*_*lla 6 vba pass-by-reference
我一直都很ByRef成功,直到现在.我需要一个函数来修改Double一个类对象.为了说明,请考虑以下程序.
Class1.cls:
Public d As DoubleRun Code Online (Sandbox Code Playgroud)
Sub Test()
Dim c As Class1, d As Double
Set c = New Class1
c.d = 5
d = 5
ChangeVar c.d
ChangeVar d
Debug.Print c.d
Debug.Print d
End Sub
Sub ChangeVar(ByRef d As Double)
d = 10
End SubRun Code Online (Sandbox Code Playgroud)
令我惊讶的是,上面的例子将输出
5
10
Run Code Online (Sandbox Code Playgroud)
任何人?
在引擎盖aClassInstance.publicVariable下封装为隐藏属性get/let对,因此传递ByRef传递隐藏get属性返回值的地址,而不是在类中声明的基础变量.
您可以通过检查d类中2种形式的地址来测试它; 他们将是不同的
(class_init)
debug.? " d address=" & VarPtr(d)
debug.? ".d address=" & VarPtr(me.d)
Run Code Online (Sandbox Code Playgroud)