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

VBA类模块封装集合通过Key访问报运行时错误13类型不匹配

错误原因

你遇到的类型不匹配错误根源在于Item方法的入参强制声明为Integer类型,只能接收数字索引,当你传入字符串类型的Key时,参数类型校验失败,直接触发运行时错误13。

修复方案

仅需要修改Item访问器的入参类型为Variant即可,原生VBA.Collection的Item参数本身就是Variant类型,同时支持整数索引和字符串Key两种入参:

' 两种写法二选一即可,功能无差异
' 写法1:用Property Get(更符合集合访问的语义惯例)
Public Property Get Item(Index As Variant) As tnpObject
    Set Item = mtnpsColl.Item(Index)
End Property

' 写法2:用Function
Public Function Item(Index As Variant) As tnpObject
    Set Item = mtnpsColl.Item(Index)
End Function

常见疑问解答

  • Item声明为Function和Property Get的区别:对于这种带参数的只读访问场景,两者运行效果完全一致,仅语义上有差异:Property Get更偏向于表示这是类的一个可访问属性,Function更偏向于表示这是一个执行后返回结果的操作,集合类的Item访问器惯例上用Property Get更多。
  • 额外优化建议:当前你把单个实体的属性(Key、Checked)和集合管理逻辑放在同一个类里,逻辑上是混淆的,建议拆分两个类:一个tnpItem类只负责存单个项的属性,另一个tnpCollection类专门做集合的增删查管理,避免后续出现单个实例还附带集合的逻辑混乱问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 05:27:02