VBA有字典结构吗?比如key<>value array?
当前回答
脚本运行时字典似乎有一个bug,可能会在高级阶段破坏您的设计。
如果字典值是数组,则不能通过对字典的引用更新数组中包含的元素的值。
其他回答
是的。适用于VB6, VBA (Excel), VB。网
脚本运行时字典似乎有一个bug,可能会在高级阶段破坏您的设计。
如果字典值是数组,则不能通过对字典的引用更新数组中包含的元素的值。
Yes.
设置对MS脚本运行时('Microsoft脚本运行时')的引用。根据@regjo的评论,转到工具->参考,并勾选“微软脚本运行时”。
使用下面的代码创建一个字典实例:
Set dict = CreateObject("Scripting.Dictionary")
or
Dim dict As New Scripting.Dictionary
使用示例:
If Not dict.Exists(key) Then
dict.Add key, value
End If
当你用完字典时,别忘了把它设置为Nothing。
Set dict = Nothing
VBA没有字典的内部实现,但是在VBA中你仍然可以使用MS Scripting Runtime Library中的字典对象。
Dim d
Set d = CreateObject("Scripting.Dictionary")
d.Add "a", "aaa"
d.Add "b", "bbb"
d.Add "c", "ccc"
If d.Exists("c") Then
MsgBox d("c")
End If
你可以通过System.Collections.HashTable访问一个非本地哈希表。
哈希表
表示基于的键/值对的集合 键的哈希码。
不确定你会想要使用这个脚本。字典,但在这里添加为完整起见。你可以回顾这些方法,如果有一些感兴趣的,例如克隆,CopyTo
例子:
Option Explicit
Public Sub UsingHashTable()
Dim h As Object
Set h = CreateObject("System.Collections.HashTable")
h.Add "A", 1
' h.Add "A", 1 ''<< Will throw duplicate key error
h.Add "B", 2
h("B") = 2
Dim keys As mscorlib.IEnumerable 'Need to cast in order to enumerate 'https://stackoverflow.com/a/56705428/6241235
Set keys = h.keys
Dim k As Variant
For Each k In keys
Debug.Print k, h(k) 'outputs the key and its associated value
Next
End Sub
@MathieuGuindon的回答给出了很多关于HashTable的细节,以及为什么需要使用mscorlib。IEnumerable(早期绑定到mscorlib的引用),以便枚举键:值对。
推荐文章
- 实现嵌套字典的最佳方法是什么?
- .text, .value和.value2之间的区别是什么?
- 如何在字典理解中使用if/else ?
- LINQ组通过到一个字典对象
- 将[key1,val1,key2,val2]转换为字典?
- 如何在Python中直接获得字典键作为变量(而不是通过从值搜索)?
- 如何将字典保存到文件?
- 如何转换列表到地图在Kotlin?
- 'setdefault' dict方法用例
- 对象的自定义类型作为字典键
- 为什么更快地检查字典是否包含键,而不是捕捉异常,以防它不?
- 使用字典字面量和字典构造函数之间有区别吗?
- 实现__hash__()的正确和好的方法是什么?
- 如何将JSON字符串转换为字典?
- Python创建一个列表字典