vba – 如何获取在“本地”窗口中实现接口的类的属性值?

这真的困扰着我,妨碍了我的开发/调试.每当我声明我正在实现的接口的变量类型时,本地窗口不显示它的属性值.相反,它只是读

Object doesn’t support this property or method

这是愚蠢的,因为它是绝对的.事实上,为了与界面完成合同,

如果我将变量声明为接口的具体实现,则窗口按预期工作.然而,这完全违背了编码到抽象开始的目的.

如何让本地窗口正确显示类的属性值?

最小,完整和可验证示例:

创建一个IClass类作为接口.

Option Explicit

Public Property Get Name() As String
End Property

创建实现接口的Class1.

Option Explicit

Implements IClass

Public Property Get Name() As String
    Name = "Class1"
End Property

Private Property Get IClass_Name() As String
    IClass_Name = Name
End Property

最后,一些测试代码在一个常规的.bas模块中来说明这个问题.

Option Explicit

Public Sub test()
    Dim x As Class1
    Dim y As IClass

    Set x = New Class1
    Debug.Print x.Name

    Set y = New Class1
    Debug.Print y.Name

    Stop
End Sub
最佳答案
我可能是错的,但我认为这可能与VBA中实例化类的方式有关.

例如:

Dim oClass1 as Class1
Set oClass1 = new Class1

不同于

Dim oClass1 as New Class1

在第二种情况下,我相信构造函数在访问属性之前不会被调用.

如果您尝试这样做,它将在Watch窗口中看到该属性.注意IClass的新功能 – 只是为了演示 – 我知道它不是这样做的:)

Public Sub test1()

    Dim x As Class1
    Dim y As IClass

    Set y = New IClass
    Set x = New Class1
    Debug.Print x.Name
    Debug.Print y.Name
    Stop

End Sub

我怀疑它与此有关,手表窗口需要这个…也许…

转载注明原文:vba – 如何获取在“本地”窗口中实现接口的类的属性值? - 代码日志