2014-11-21 33 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