我一直用 ByRef
成功,直到现在。我需要一个函数来修改 Double
来自类对象。为了说明,请考虑以下程序。
Class1.cls:
Public d As Double
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 Sub
令我惊讶的是,上面的示例将输出
5
10
有人吗?
最佳答案
引擎盖下 aClassInstance.publicVariable
被封装成一个隐藏属性get/let对,所以传递ByRef
正在传递隐藏地址 get
属性返回值,而不是类中声明的底层变量。
您可以通过检查 d
的两种形式的地址来测试这一点。类(class)内;他们会有所不同
(class_init)
debug.? " d address=" & VarPtr(d)
debug.? ".d address=" & VarPtr(me.d)
关于vba - ByRef 不能在 VBA 中使用类中的值类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10587324/