vba - ByRef 不能在 VBA 中使用类中的值类型

标签 vba pass-by-reference

我一直用 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/

相关文章:

vba - 条件格式,虽然应用但没有出现格式

vba - 将函数结果复制到 Sub

pointers - 围棋之旅,引用Vector结构时&与no与之间的区别

functional-programming - D 中的容器语义和功能风格

c# - 我们可以修改队列中对象的属性 - C# 吗?

C#将方法名称传递给带有变量的参数化threadstart

vba - 将文件 xls 保存在动态目录中

vba - 从范围 VBA 中查找最后一个单元格

excel - 如何设置分页预览?

python - Cython:通过引用传递