概述
在 使用 VBA 编程时,当我们需要存储多项数据时,可能会首先想到数组,毕竟这是 VBA 基础知识中就会学到的。
但数组存在一些不便之处,比如只能按索引查找其中的条目,不直观;不能随意删除中间的条目,不方便。
基于这样一些问题,VBA 中为我们提供了集合 Collection。它在数组的基础上,可以使用键(Key)来查找条目,可以任意添加、删除条目。这样就比数组要方便多了。
但仍然不够,我们想要更多。比如可以判断键/条目是否存在,可以随时修改条目内容等等。
众里寻她千百度,在 Microsoft Scripting Runtime 库中,有一个 Scripting.Dictionary 对象,它在 Collection 的基础上,具有更丰富的功能,这就是我们想要的!
由于 Scripting.Dictionary 是第三方库中的内容,而不是 Access 或平台内置的东西,因而在平台中使用时,我们需要引用后才能使用,这样仍然有一点不方便。
平台的愿景就是让大家更方便,于是从 2.5.0 版开始,平台默认集成了 Dictionary 对象,则不再需要引用即可直接使用,又保留了 VBE 中智能感知和自动完成的方便功能。
平台中的 Dictionary 和 Scripting.Dictionary 百分百兼容,接口完全相同。唯一的区别就在于平台的 Dictionary 不需要引用,但仍然可以使用 VBE 的智能感知和自动完成功能,即同时具有 Scripting.Dictionary 前期绑定和后期绑定的优点。
开发接口
属性 | 说明 |
---|---|
CompareMode | 设定或返回键的字符串比较模式。
|
Count | 只读。返回 Dictionary 里的键/条目对的数量。 |
Item(Key) | 设定或返回指定的键的条目值。 |
Key(Key) | 设定键值。 |
方法 | 说明 |
---|---|
Add(Key,Item) | 增加键/条目对到 Dictionary。 |
Exists(Key) | 如果指定的键存在,返回 True,否则返回 False。 |
Items | 返回一个包含 Dictionary 对象中所有条目的数组。 |
Keys | 返回一个包含 Dictionary 对象中所有键的数组。 |
Remove(Key) | 删除一个指定的键/条目对。 |
RemoveAll | 删除全部键/条目对。 |
示例
'使用 Microsoft Scripting Runtime 中的 Dictionary 的前期期绑定写法(需引用): Dim dct As Scripting.Dictionary Set dct = New Scripting.Dictionary With dct .Add "K1", "张三" .Add "K2", "李四" .Add "K3", "王五" End With '------------------------------------------------------------------------------ '使用 Microsoft Scripting Runtime 中的 Dictionary 的后期绑定写法(不引用): Dim objDict As Object Set objDict = CreateObject("Scripting.Dictionary") With objDict .Add "K1", "张三" .Add "K2", "李四" .Add "K3", "王五" End With '------------------------------------------------------------------------------ '2.5.0 之后在平台中使用的写法: Dim dct As Dictionary Set dct = NewDictionary() With dct .Add "K1", "张三" .Add "K2", "李四" .Add "K3", "王五" End With '判断K4是否存在,如果不存在则添加 If dct.Exists("K4") Then dct.Add "K4", "红尘如烟" End If
修订记录
- 2019-07-08 2.5.0 加入