ByRef无法在VBA中使用类中的值类型

And*_*lla 6 vba pass-by-reference

我一直都很ByRef成功,直到现在.我需要一个函数来修改Double一个类对象.为了说明,请考虑以下程序.

Class1.cls:
Public d As Double
Run 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 Sub
Run Code Online (Sandbox Code Playgroud)

令我惊讶的是,上面的例子将输出

5
10
Run Code Online (Sandbox Code Playgroud)

任何人?

Ale*_* K. 6

在引擎盖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)