You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 02:32:10