vba - 尝试从 VBA 字典中检索值,如果 key 未使用,则会引发错误?

标签 vba excel dictionary

我在许多其他语言中使用过字典(无论它们是否被称为字典),但总有一种方法可以使用以下参数来调用:

A) 如果参数用作键,则返回关联值,或者
B) 以某种方式表明该参数不用作键

我被迫学习 Excel/VBA,并使用集合类大约五分钟,然后由于缺少 .exists 方法,我不得不寻找其他方法。普遍的共识似乎是 scripting.Dictionary 类在 VBA 中相当于其他语言中的关联数组/字典/哈希表。

我不喜欢它的外观的一件事是,我可以看到检索与给定键关联的值的唯一方法是使用 .items 属性(显式地或通过 scripting.Dictionary(" key ”))。但是,如果字典中未使用 key ,它不会采取任何措施来指示问题,而是添加它。

我知道我可以使用 if 结构和 .exists 作为测试来实现相同的功能,并且可以编写自己的函数,如果存在测试失败,该函数会引发错误,但似乎需要做很多填充才能实现什么是 Python(引发 KeyError)、PHP(引发通知)、Java(Map 返回 null)的核心功能 - 尽管在 HashMap 的情况下这不一定是理想的,其中 null 实际上是一个有效值 - 但它确实可以作为哈希表)。

那么有没有什么方法可以尝试通过键检索值,如果该键未被使用,该值会执行某些操作(理想情况下会抛出错误),而不是默默地添加它? Google 尚未提供任何答案 - 但也许我只是没有很好地表述搜索。

最佳答案

我发现当您访问不存在的 key 时 Dictionary 添加 key 也很不方便。

只需使用Collection并自己编写缺少的Exist函数,例如

Function ExistsInCollection(ByVal c As Collection, ByVal key As Variant) As Boolean
  On Error GoTo not_exists
  c.Item key
  ExistsInCollection = True
not_exists:
End Function

关于vba - 尝试从 VBA 字典中检索值,如果 key 未使用,则会引发错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29434573/

相关文章:

c# - 如何使用 SpreadsheetLight 创建数据透视表?

python - 如何使 PyCharm 折叠/折叠字典构造函数 `dict()` ?

dictionary - 在云代码中创建以 ParseObject 作为键的字典仅给出 [Object object]

java - 确定获得(纬度、经度)对的正确顺序以绘制 N 边的闭合正多边形的方法

Excel - 从行和列条件返回列引用

vba - 使用 VBA 根据频率计算到期日

字典后期绑定(bind)中的 VBA Excel 字典

excel - MS Access 中的舍入

excel - VBA XML : Find root nodes for multiple namespaces

vb.net - .Net 中的 Excel 互操作 - 捕获 VBA 错误?