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

如何在Scripting.Dictionary中覆盖已有键对应的值?

问题分析与解决方案

嘿,当然可以覆盖VBA字典里已存在键对应的值!你现在的问题出在使用Add方法的逻辑上——Add方法只能用来添加新键,如果键已经存在,它就会抛出错误,而你用On Error Resume Next跳过了这个错误,但并没有执行更新值的操作,所以旧值一直没被替换。

正确的两种处理方式:

方式1:直接赋值(最简洁)

VBA字典支持直接通过键名赋值,不管键是否存在:

  • 如果键不存在,会自动添加这个键并赋值
  • 如果键已经存在,会直接覆盖原有值

把你的代码改成这样就行:

If status Like "*Active*" Then
    total_active = total_active + amount
    ' 直接赋值,替代Add方法
    active_dict(cost_center) = total_active
End If

这样完全不需要错误处理代码,逻辑更清晰,还能实现更新值的需求。

方式2:先判断键是否存在,再决定添加或更新

如果你想保留显式的判断逻辑,也可以用Exists方法检查键是否存在:

If status Like "*Active*" Then
    total_active = total_active + amount
    If active_dict.Exists(cost_center) Then
        ' 键存在,更新值
        active_dict(cost_center) = total_active
    Else
        ' 键不存在,添加新键值对
        active_dict.Add Key:=cost_center, Item:=total_active
    End If
End If

这种方式更直观,适合需要区分“添加”和“更新”操作场景的情况。

为什么你原来的代码不行?

你之前用On Error Resume Next跳过了Add方法的重复键错误,但跳过错误后,代码并没有执行任何更新值的语句,所以字典里的旧值一直没被修改。直接赋值的方式就完美解决了这个问题,既不用处理错误,又能自动处理添加和更新两种情况。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:55:03