是否尝试从VBA字典中检索值,并在键未使用时引发错误?
我在许多其他语言中使用过字典(无论它们是否被称为字典),但总有一种方法可以使用on参数调用,该参数可以是: A) 如果参数用作键,则返回相关值,或是否尝试从VBA字典中检索值,并在键未使用时引发错误?,vba,excel,dictionary,Vba,Excel,Dictionary,我在许多其他语言中使用过字典(无论它们是否被称为字典),但总有一种方法可以使用on参数调用,该参数可以是: A) 如果参数用作键,则返回相关值,或 B) 以某种方式指示该参数未用作键 在缺少.exists方法之前,我不得不学习excel/VBA并使用collections类整整五分钟,这迫使我不得不寻找其他方法。普遍的共识似乎是scripting.Dictionary类是其他语言中关联数组/字典/哈希表的VBA等价物 但我不喜欢的一点是,检索与给定键关联的值的唯一方法是使用.items属性(显式
B) 以某种方式指示该参数未用作键 在缺少.exists方法之前,我不得不学习excel/VBA并使用collections类整整五分钟,这迫使我不得不寻找其他方法。普遍的共识似乎是scripting.Dictionary类是其他语言中关联数组/字典/哈希表的VBA等价物 但我不喜欢的一点是,检索与给定键关联的值的唯一方法是使用.items属性(显式地或通过脚本.Dictionary(“key”))。但是,如果字典中没有使用key,它就添加了key,而不是做任何事情来指出问题 我知道我可以使用if结构和.exists作为测试来实现相同的功能,并且可以编写自己的函数,在exists测试失败时引发错误,但是在Python(raises KeyError)、PHP(raises a Notice)、Java中实现核心功能似乎需要大量的填充(映射返回null——虽然对于哈希映射来说,这并不一定理想,因为null实际上是一个有效值——但它确实可以作为哈希表的指示符)
那么,有没有任何方法可以尝试通过键检索值来做一些事情(理想情况下抛出一个错误)如果密钥没有被使用,而不是默默地添加它?谷歌没有提供任何答案-但也许我只是没有很好地使用搜索语句。我发现当你访问一个不存在的密钥时,字典添加密钥也很不方便 只需使用
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
您可以将scripting.dictionary包装在自定义类中,并使用(例如)一个“Get”方法,该方法使用Exists首先检查密钥是否存在,并在缺少密钥时引发和错误。我们希望这在没有自定义代码的情况下是可能的,这些自定义代码必须在我可能使用的任何站点上复制,但看起来自定义代码是唯一的选项:/至少它是一个小函数:)