2014-01-12 18 views
2

的情況下,這可能是一個福利局問題的東西,但這裏有雲:初始化類在VBA數目不定:使用變量和往常一樣命名

我有15個屬性的類。每個班級代表關於一個庫存物品的信息(有多少,最近有多少貨物等)。每次通過傳遞一個股票代碼初始化一個類時,它就會收集來自其他來源的所有數據並將其作爲該類的屬性進行存儲。

我希望能夠初始化n類的數量,取決於列表的長度(從不超過200)。我想用他們的股票代碼來命名這些類,以便我可以稍後調用這些信息並添加到它中。唯一的問題是我不知道如何使用一個變量來命名一個類。我不想長時間寫出200課,因爲我確信有更好的方法來完成它,並按順序初始化它們,直到輸入(從ActiveCell= ""或它達到最大值200.列表長度我想因爲有股票代碼,如果可能創造儘可能多的類的實例,並生成它們是這樣的:

僞代碼:

For Each xlCell In xlRange 
    strIN = xlCell.Value 

    Dim ICode(strIN) As New C_ICODE 

    ICode(strIN).lIcode = strIN 
Next 

Letclassname.lIcode = strIN提供了類所有用戶輸入它需要的內容,然後執行各種功能和子程序以獲得其他14個屬性。

如果有人能讓我知道這種事情是否可能在VBA中,我將不勝感激,如果是的話,我該怎麼做呢?絕對努力尋找相關信息。

回答

6

您可以使用Dictionary對象:

Dim ICode As Object 
Set ICode = CreateObject("Scripting.Dictionary") 

For Each xlCell In xlRange 
    strIN = xlCell.Value 

    ICode.Add strIN, New C_ICODE 

    ICode(strIN).lIcode = strIN 
Next 
+2

很好地完成。 :) –

+2

正是我在找什麼。謝謝 – Orphid

+2

+1您也可以使用'Collection',避免使用'CreateObject'。 –

2

我只是做的一個快速的測試,它好像它可能爲你工作。你可以創建一個數組來存放你的類的多個實例。

Sub thing() 

    Dim cArray(1 To 10) As Class1 
    Dim x As Long 

    For x = 1 To UBound(cArray) 
     Set cArray(x) = New Class1 
    Next 

    ' Assume the class has a property Let/Get for SomeProperty: 
    For x = 1 To UBound(cArray) 
     cArray(x).SomeProperty = x * 10 
    Next 

    For x = 1 To UBound(cArray) 
     Debug.Print cArray(x).SomeProperty 
    Next 

End Sub 
+0

也很有趣。這是我認爲一定可能的事情,但不確定 – Orphid