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

VBA访问嵌套对象属性时出现Run-time error 91错误的求助

VBA访问嵌套对象属性时出现Run-time error 91错误的求助

兄弟,太懂你这种明明看着逻辑没问题,结果一运行就报91错误的挫败感了!咱们来揪出这个问题的根源,其实就是对象属性的赋值/返回没用到Set关键字,还有个小细节是类型不匹配的问题,咱们一步步来改:

问题核心原因

你在Proveedor类的Requerimientos Get属性里犯了两个关键错误:

  1. 对象返回没有用Set:Vinculo是对象类型,返回对象属性时必须用Set关键字,你直接写Requerimientos = pedidos_(index),VBA会默认去取对象的默认属性,但你的Vinculo类没有设置默认属性,自然就会抛出“对象变量未设置”的错误。
  2. 越界返回值类型不匹配:当索引越界时,你返回了一个字符串,但Requerimientos的返回类型是Vinculo对象,这会导致类型不匹配的隐性问题。

修正后的Proveedor类Requerimientos Get属性代码

把原来的Get属性代码替换成下面这段:

Public Property Get Requerimientos(index As Integer) As Vinculo
    ' 先判断索引是否在数组的有效范围内
    If index < LBound(pedidos_) Or index > UBound(pedidos_) Then
        ' 索引越界时返回Nothing,或者你也可以抛出明确的错误提示
        Set Requerimientos = Nothing
        ' 如果你想抛出错误,替换成下面这行:
        ' Err.Raise vbObjectError + 1001, "Proveedor.Requerimientos", "索引超出有效范围"
        Exit Property
    End If
    
    ' 对象类型的返回必须用Set关键字
    Set Requerimientos = pedidos_(index)
End Property

额外的小优化(可选)

另外,你的Requerimientos Let属性里,其实可以简化一下逻辑,因为你已经在判断pedidos_(index) Is Nothing时新建了对象,但其实直接Set pedidos_(index) = str就足够了,不过当前的写法也没问题,只是提一下。

验证修改

改完之后再运行你的testing_2_objetosjuntos宏,那些Debug.Print语句就能正常输出Vinculo对象里的属性值了,不会再报91错误啦!

备注:内容来源于stack exchange,提问作者Gabe Demarco

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.23 15:32:29