VBA中能否实现集合嵌套集合?含类对象的嵌套结构疑问
VBA实现嵌套集合类的层级访问方案
完全可以实现你描述的嵌套集合结构,下面是具体的实现步骤和代码示例:
步骤1:创建存储名称的内层类模块
插入一个类模块,命名为NameItem,添加以下代码:
Public names As String
步骤2:创建包含子集合的中间类模块
插入另一个类模块,命名为Class_1,添加以下代码:
Public Collection_number_2 As Collection Public Number As Integer ' 对应你提到的数字属性 Private Sub Class_Initialize() ' 初始化子集合 Set Collection_number_2 = New Collection End Sub
步骤3:构建外层集合并填充数据
在标准模块(比如Module1)中添加测试代码:
Sub TestNestedCollections() Dim Collection_number_1 As Collection Dim cls As Class_1 Dim nameItem As NameItem Dim i As Integer, j As Integer ' 初始化外层集合 Set Collection_number_1 = New Collection ' 填充5个Class_1对象到外层集合 For i = 1 To 5 Set cls = New Class_1 cls.Number = i ' 给Class_1对象赋值数字属性 ' 为每个Class_1对象添加3个NameItem到子集合 For j = 1 To 3 Set nameItem = New NameItem ' 赋值示例名称 Select Case j Case 1: nameItem.names = "aaa" Case 2: nameItem.names = "bbb" Case 3: nameItem.names = "ccc" End Select cls.Collection_number_2.Add nameItem Next j Collection_number_1.Add cls Next i ' 测试层级访问(和你需求的语法一致,仅去掉冗余的类名调用) Debug.Print Collection_number_1(1).Collection_number_2(1).names ' 输出"aaa" Debug.Print Collection_number_1(5).Collection_number_2(3).names ' 输出"ccc" Debug.Print Collection_number_1(2).Number ' 输出2 End Sub
关键说明
你提到的Collection_number_1(1).Class_1.Collection_number_2(1).names语法中,Class_1是类的名称,实际访问时不需要额外声明——因为Collection_number_1中存储的就是Class_1类型的对象,直接调用对象的属性/子集合即可,正确的访问语法如上面测试代码所示。
内容的提问来源于stack exchange,提问作者Tounn
相关产品推荐
相关产品推荐

