excel - 列出 VBA 2003 中类的属性

标签 excel vba oop properties

我到处搜索,看看这个问题是否有一个简单的答案,但似乎没有......

我正在使用 Excel VBA 2003(是的,我知道它已经过时,但我无法更改它),我想要做的就是列出给定中所有可读属性的名称和值自定义类。

我想做这样的事情:

类定义(名为 cFooBar 的类)

Option Explicit

Private pFoo As String
Private pBar As String

Public Property Get Foo() As String
Foo=pFoo
End Property

Public Property Get Bar() As String
Bar=pBar
End Property

调用代码

Dim myFooBar as cFooBar, P as Property
myFooBar=new cFooBar
For Each P in myFooBar.Properties
Debug.Print P.Name, P.Value
Next

当然,这不起作用,因为似乎没有自定义类的“Properties”集合成员(或者至少没有您可以获取的成员),并且没有“Property”输入其中之一。

有人知道解决这个问题的方法吗?

TIA,

坎贝尔

最佳答案

正如 John 上面提到的,VBA 不支持反射。这是我之前使用过的一个技巧。基本上,您可以创建一个 Collection 或 Dictionary 对象来按名称存储您的“属性”。

Option Explicit

Private pProperties As Object

Public Property Get Properties() As Object
    Set Properties=pProperties
End Property

Public Property Let Properties(p as Object) 
    Set pProperties = p
End Property


Sub Class_Initialize()
    Set pProperties = CreateObject("Scripting.Dictionary")

    'Add/instantiate your properties here
    pProperties("foo") = "this is foo"
    pProperties("bar") = "this is bar"


End Sub

调用代码

Dim myFooBar As New cFooBar, P As Variant

For Each P In myFooBar.Properties.Keys()
    Debug.Print P, myFooBar.Properties(P)
Next

关于excel - 列出 VBA 2003 中类的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27063177/

相关文章:

c++ - 从基类的间接多重继承向上转型

java - 在传递给 JFrame 的 java 控件上显示滚动条?

php - 在 OOP PHP 中重构代码并使用 PDO 进行 mysql 查询

vba - 继续For循环

excel - 438 粘贴到事件工作簿时出错

vba - 如何使用 Excel VBA 宏循环行?

excel - 在Excel中选择并拖动多个单元格时,FillSeries如何计算数字?

excel - 如何使用vba将合并表从word导出到Excel

vba - 在excel中检索与单个ID关联的多个值

VBA 收到错误 Worksheet 类的 Active 方法失败