【发布时间】:2021-06-01 18:00:22
【问题描述】:
我正在尝试将大型 3 维数组转换为一系列类模块。我将每个下一个类存储为上一个类中的一个数组。它就像品牌 -> 产品 -> 很多。
我已经成功创建了这个交互,并且可以通过如下名称访问它们:
Sub test()
Dim MyBrand As Brand
Set MyBrand = New Brand
MyBrand.Name = "Company1"
MyBrand.AddProduct "Shoes"
MyBrand.Products("Shoes").AddLot "240502"
MsgBox MyBrand.Products("Shoes").Lots(0) 'Correctly Displays "240502"
End Sub
但后来我想创建一个对象组,可以保存多个Brand 对象并像Brands("Company1") 一样访问它们。
如果我在类模块中使用数组,我最终会得到Brands.Brand("Company1")。
如果我使用Collection,我将不得不使用像Brands(1) 这样的索引。
有没有办法创建适当的对象组,以便我可以模仿 Application.Workbooks 等组的语法并按名称引用成员?
【问题讨论】:
-
您可以使用
Scripting.Dictionary和Name作为键。 -
为什么不用
Collection.Add item, key,然后key获取元素呢? -
如果您有可能出现重复键,我建议您使用内置的字典
.exists() -
是的,只是尝试使用键的集合,看起来字典更胜一筹。当我尝试检查
MyCollection("New Name") is Nothing时出现错误。这意味着我无法像使用MyDict.Exists("New Name")那样测试它。 -
这里有很好的概述 - codevba.com/help/collection.htm
标签: excel vba collections