【问题标题】:Adding variable number of objects to collection将可变数量的对象添加到集合中
【发布时间】:2015-10-10 16:16:45
【问题描述】:

我知道将对象添加到集合中可以通过

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

我可以调用我想使用的数据,例如 (Cost = Bag.Quantity * 2)

但是我的问题是我的项目列表将是用户定义的。有没有办法将可变数量的对象添加到集合中,并且仍然能够通过项目名称检索单个数据?

例如,给我一个物品清单:鞋、包、太阳镜、裤子

我想编写一个 for 循环来读取“Item”类下的所有这些对象,但仍然能够计算(xyz = Sunglasses.Quantity + Pants.Quantity - Bag.Quantity)。我尝试使用计数器,但它似乎只接受常量表达式。

这可能吗?如果是这样,我将不胜感激帮助找出如何做到这一点。

【问题讨论】:

  • 我不是 VBA 中 OOP 方面的专家,所以我不确定名称是否会检索,但您可以创建一个 Item 类并定义一个 Type 属性来执行此操作(除非您的项目彼此相差太大,然后在属性中可能会很混乱)
  • 12 让您开始使用 VBA 中的接口和 oop

标签: vba oop


【解决方案1】:

您可以使用键将项目添加到集合中:

ItemList.Add Shoe, "Shoe"

然后通过指定这个键来检索它:

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

【讨论】:

  • 谢谢你,它工作得很好。也感谢 stakx 的及时回复
【解决方案2】:
Set Shoe = New CItem
      With Shoe
           .Quantity
           .IDNumber 
           .Description
      End With

请注意,您在此处创建的CItem 对象没有描述对象类型的属性。也就是说,如果你只看这个物体​​,就无法判断它“是一只鞋”。对于这样一个对象,你所知道的只是一个数量、一个 ID 号和一个描述。

您将变量命名为Shoe;但这只是变量的名称,而不是引用的对象的名称。

您需要做的是添加某种.Type.Category 属性,以便您的对象具有自我描述性。您的上面的代码将被修改为这样的多行:

Shoe.Category = "Shoe"

这使得获取CItems 的集合成为可能,对它们进行迭代,并对每个.Category 的数量求和。

但您列表中的对象将不再有各自的专用变量名称。

【讨论】:

  • mm 我真的不明白如何将您回答的内容应用到迭代数据挖掘的循环中
猜你喜欢
  • 2014-12-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-25
  • 1970-01-01
  • 2018-06-09
  • 1970-01-01
相关资源
最近更新 更多