2014-11-21 32 views
1

我已经找遍了,看看是否有一个简单的回答这个问题,但似乎没有要...清单一类的VBA属性2003

我用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,

坎贝尔

+2

什么你所描述的是反射这是没有很好地建立在VBA,但我看到了这篇文章,似乎让你做类似的东西你描述...这是未经测试的 - 我刚刚看到它:http://www.amolpandey.com/2012/08/05/dynamic-vba-properties-getset/ – 2014-11-21 14:34:10

回答

1

正如John上面提到,反射不VBA支持。这是我以前使用过的黑客。基本上,你可以创建一个集合或字典对象来存储你的“属性”的名称。

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 
+0

谢谢 - 这可以作为一种享受 – 2014-11-24 10:19:26