VBA访问嵌套对象属性时出现Run-time error 91错误的求助
VBA访问嵌套对象属性时出现Run-time error 91错误的求助
兄弟,太懂你这种明明看着逻辑没问题,结果一运行就报91错误的挫败感了!咱们来揪出这个问题的根源,其实就是对象属性的赋值/返回没用到Set关键字,还有个小细节是类型不匹配的问题,咱们一步步来改:
问题核心原因
你在Proveedor类的Requerimientos Get属性里犯了两个关键错误:
- 对象返回没有用
Set:Vinculo是对象类型,返回对象属性时必须用Set关键字,你直接写Requerimientos = pedidos_(index),VBA会默认去取对象的默认属性,但你的Vinculo类没有设置默认属性,自然就会抛出“对象变量未设置”的错误。 - 越界返回值类型不匹配:当索引越界时,你返回了一个字符串,但
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
相关产品推荐
相关产品推荐

