尝试从VBA字典中检索值并在密钥未使用时引发错误?

时间:2015-04-03 14:57:01

标签: excel vba excel-vba dictionary

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

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

我被迫进入一个我必须学习excel / VBA的位置,并且在缺少.exists方法导致我寻找其他东西之前大约五分钟使用了集合类。普遍的共识似乎是scripting.Dictionary类是VBA等同于其他语言中的关联数组/字典/哈希表。

我不喜欢的一点是,我能看到检索与给定键相关联的值的唯一方法是使用.items属性(显式地,或通过scripting.Dictionary(“键”))。但是,如果密钥没有在字典中使用,而不是做任何事情来表明问题,它就会添加它。

我知道我可以使用带有.exists的if结构作为测试来实现相同的功能,并且可以编写我自己的函数,如果存在的测试失败会引发错误,但似乎很多东西要实现什么是Python中的核心功能(引发KeyError),PHP(引发注意),Java(地图返回null - 虽然在HashMaps的情况下不一定理想,其中null实际上是一个有效值 - 但它确实作为指标哈希表)。

那么有没有办法尝试通过密钥检索一个值,如果密钥没有被使用,它会做某事(理想情况下抛出一个错误),而不是默默地添加它?谷歌没有提供任何答案 - 但也许我只是没有对搜索做好准备。

1 个答案:

答案 0 :(得分:1)

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

只需使用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