2015-07-21 16 views
3

我理解對象添加到集合可以通過添加可變數量的對象來收集

Dim ItemList As Collection 
Set ItemList = New Collection 

Dim Item As New CItem 

Set Shoe = New CItem 
     With Shoe 
      .Quantity 
      .IDNumber 
      .Description 
     End With 
ItemList.Add Shoe 

Set Bag = New CItem 
     With Bag 
      .Quantity 
      .IDNumber 
      .Description 
     End With 
ItemList.Add Bag 

做我就能夠調用的數據我想使用類似(成本= Bag.Quantity * 2)

但是我的問題是,我的項目列表將由用戶定義。有沒有辦法將可變數量的對象添加到集合中,並仍能夠通過項目名稱檢索單個數據?

例如,我給出的項目清單:鞋,箱包,太陽鏡,褲子

我想編寫一個for循環讀取下的類「項目」所有這些對象,但仍然能夠計算(xyz = Sunglasses.Quantity + Pants.Quantity - Bag.Quantity)。我試圖使用計數器,但它似乎只接受常量表達式。

這可能嗎?如果是這樣,我將不勝感激幫助找出如何做到這一點。

+0

我不是在VBA OOP的專家,所以我m不知道名稱是否會被刪除,但是您可以創建一個Item類並定義一個Type屬性來執行此操作(除非您的項目彼此之間差別太大,然後可能會在屬性中變得混亂) – R3uK

+0

[** 1 **](http://stackoverflow.com/a/19908375/2140173)和[** 2 **](http://stackoverflow.com/a/19379641/2140173)到ge你開始接口和OBA在VBA – 2015-07-21 10:18:36

回答

3

您可以將項目集合與鍵添加:

ItemList.Add Shoe, "Shoe" 

,然後通過指定這個鍵檢索:

Dim Shoe As CItem 
Set Shoe = ItemList.Item("Shoe") 
+1

謝謝你的作品很好。謝謝stakx的及時回覆 –

2
Set Shoe = New CItem 
     With Shoe 
      .Quantity 
      .IDNumber 
      .Description 
     End With 

請注意,您正在創建這裏的CItem對象不具有描述對象的類型的屬性。也就是說,如果你只看對象,就沒有辦法說它是「鞋子」。你所知道的這個對象是一個數量,一個ID號和一個描述。

您將變量命名爲Shoe;但這只是變量的名稱,而不是引用的對象。

您需要做的是添加某種.Type.Category屬性,以便您的對象變得具有自描述性。

Shoe.Category = "Shoe" 

這使得有可能採取的集合CItem S,在它們之間迭代,每.Category總結數量:您上面的代碼將與更多的這樣一行進行修正。

但是,列表中的對象將不再具有各自的專用變量名稱。

+0

毫米我真的不知道我可以如何應用你已經回答了一個循環迭代數據挖掘 –