在VBA 2003中列出类的属性

时间:2014-11-21 14:06:04

标签: 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

当然,这不起作用,因为似乎没有自定义类的“属性”集合成员(或者至少没有可以获得的成员),并且没有“属性”输入。

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

TIA,

坎贝尔

1 个答案:

答案 0 :(得分:2)

正如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