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

VBScript中使用.Item setter嵌套字典遇800A01C2错误,如何解决?

VBScript中Scripting.Dictionary的Item属性赋值对象报错问题

注:此问题并非重复问题

需求限制

  • 不希望创建新类
  • 也不希望使用临时包装器(否则宁愿用array(1)替代)

测试代码

sub Test()
  Dim D, V  ' "as Variant" - not supported in VBS
  Set D = CreateObject("Scripting.Dictionary")
  D.Item("ffff") = 12345
  DlgOk "set_item (int) ok"
  Set V = CreateObject("Scripting.Dictionary")
  D.Add "sdfsdfs", V
  DlgOk "add (dict) ok"
  D.Item("sdfsdfs") = V
  DlgOk "set_item ok"
end sub

其中DlgOk为内部弹窗函数。

问题现象

根据WSH 5.6最新文档,上述代码应可正常运行,但实际测试发现:

  • 为字典赋值简单值(如D.Item("ffff") = 12345)可正常工作;
  • 使用D.Add "sdfsdfs", V方法添加字典也可正常运行,但仅适用于外层字典为空的特定场景;
  • 但D.Item("sdfsdfs") = V语句无论是否提前执行过Add操作,都会触发800A01C2“无效属性赋值”错误。无法直接用Add替代.Item赋值,因为Add在键已存在时会报错。

问题原因分析

查看ObjView中的COM声明,发现Item属性存在两个几乎相同的setter(propputref和propput),这似乎导致包括VBScript在内的多个语言运行时在赋值IDispatch/对象时出现异常,而普通值(如整数、数组)则无此问题。

求助

我能想到基于条件判断的变通方案,但想了解是否有更简便的方法,可直接让.Item赋值对象的操作生效?


内容的提问来源于stack exchange,提问作者Arioch 'The

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 12:15:15