2016-07-05 72 views
2

我正在嘗試製作一個樹(實際上是一種組合模式),但我無法將創建的類的項添加到家長。VBA:將類項添加到類中的集合

Private pChildList As Collection 

Private Sub Class_Initialize() 
    Set pChildList = New Collection 
End Sub 

Public Property Set ChildList(Value As CProduct) 
    pChildList.Add Value 
End Property 

Public Property Get ChildList() As Collection 
    ChildList = pChildList 
End Property 

主要功能調用

Set Pro = New CProduct 
Set Child = New CProduct 
Pro.ChildList.Add Child 

所以結果應該是一個家長(專業版),其pChildList集合在子裏面,但我只得到了錯誤「參數不是可選的」。

非常感謝提前!

回答

4

你只是缺少一個Set在您的財產獲取定義。 A Collection是一個對象,您需要使用Set關鍵字將其影響到一個變量。

Public Property Get ChildList() As Collection 
    Set ChildList = pChildList 
End Property 

爲了配合我的回答下面你對此有何評論:

Property Set是對象,Property Let是基本類型。這兩個屬性通常用於更改成員變量的值(並且預期會這樣做),即訪問變量進行寫入,但是可以在代碼中執行任何您想要的操作。 Property Get通常用於返回成員變量的值(但再次,您可以在代碼中執行任何操作),即訪問變量以進行讀取。 由於沒有理由改變pChildList本身,我會完全刪除Property Set。 您還可以決定完全隱藏的成員變量和使用成員函數添加和刪除童車,例如:

Public Sub AddChild(vValue as CProduct) 
    pChildList.Add vValue 
End Sub 
+0

哇,非常感謝!現在我在通過代碼之前沒有得到的是爲什麼它使用「Get」函數?我試圖設置(或實際添加)一個Item到pChildList,程序是否需要首先將集合返回給主函數,並在將新集合返回給類之前添加該項目,或者該交易是什麼? – user2950764

+1

那麼,代碼正在做你在編寫'Pro.ChildList.Add Child'時告訴它做的事情。你也可以編寫'SetPro.ChildList = Child'來做同樣的事情(假設你寫的代碼,請注意你寫的'Set'屬性是奇數,並沒有做它可以做的事情)。 –

+0

如果我是誠實的,我只做了Set函數,因爲我使用其他變量的「Let」給了我一個錯誤,它說我只能使用「get,let或set」並且set並沒有給我任何錯誤。那麼返回/訪問類外pChildList的優先方式是什麼? – user2950764