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

VBA构建嵌套Collection的类对象结构时报错91问题求助

VBA嵌套Collection运行时错误91解决方案

错误原因

你触发Run-time error '91': Object variable or With block variable not set的核心原因是顶层Collection col_A仅完成了对象类型声明,没有进行实例化。你代码中Dim col_A As Collection这行只是定义了一个可指向Collection对象的指针,并没有实际创建Collection实例,因此调用col_A.Add方法时找不到对应对象,抛出对象未设置的错误。

修复方案

主模块修改

只需给col_A补充实例化逻辑即可,有两种写法二选一:
写法1:声明同时实例化

Dim col_A As New Collection

写法2:先声明后手动实例化

Dim col_A As Collection
Set col_A = New Collection

修正后的完整主模块代码如下:

Sub main()
    Dim objB As cls_B
    Dim col_B As New Collection

    ' 填充col_B集合(为简化演示只添加1个元素)
    Set objB = New cls_B
    objB.intb = 5
    objB.dbl = 5.15
    col_B.Add objB

    ' 填充col_A集合
    Dim objA As cls_A
    ' 修正:实例化顶层集合col_A
    Dim col_A As New Collection

    Set objA = New cls_A
    objA.inta = 2
    Set objA.col_B = col_B

    col_A.Add objA  ' 此处不再报错
End Sub

可选优化

为了避免类内部的Collection也出现同类未初始化问题,建议给cls_A添加类初始化、销毁事件,自动管理内部col_B的生命周期:

' cls_A类模块代码
Public inta As Integer
Public col_B As Collection

' 类实例化时自动创建内部Collection
Private Sub Class_Initialize()
    Set col_B = New Collection
End Sub

' 类销毁时自动释放资源
Private Sub Class_Terminate()
    Set col_B = Nothing
End Sub

优化后无需在外部单独创建col_B再赋值给类对象,可直接操作objA.col_B.Add添加元素,逻辑更简洁,也能避免漏初始化的问题。

内容的提问来源于stack exchange,提问作者David R

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 20:45:08