Hi ,大家好,上一期介绍了VBA中集合的简单应用,了解到集合相对于数组,更适用于事先无法预知要保存多少数据项的情况,因为集合可以任意的添加删除数据项,没有数据项个数限制。
但是我们也可以看到,集合在访问数据项的时候也有一些限制,常用的是通过索引号来访问数据项,但是如果这中间发生了数据项的删除或者添加,则索引号所对应的数据项就会发生变化,如果有些情况下没有注意到这种变化,则获取到的数据项可能不是预先想要的数据。
虽然集合针对这样的情况,添加了用于替代位置索引访问集合的key,也就是一串唯一的字符串表达式,但是实际使用起来也不是特别的方便,因此,VBA中针对这种使用唯一的key来访问数据项的情况,引入了一个新的对象----字典
字典
字典,简单来说,就是专门用来存储键值对的一种对象,其中键(key)是用来索引的,真正存储的数据是键所对应的值,也就是数据项。
相比于集合中key只能是字符串表达式来说,字典的key的可用的范围更广,虽然通常是整数或者是字符串,但是除了数组之外,其他的数据类型基本上都可以用。
通过如下代码可声明一个字典:
'声明一个通用对象Dim Dic As Object'创建一个字典对象,并绑定到通用对象Set Dic = CreateObject("Scripting.Dictionary")
从上述代码可以看到,字典的声明比数组和集合要复杂一些,这是因为字典不是VBA内置的数据类型,属于Windows脚本语言的类型,因此默认情况下不能像其他VBA内置的数据类型的一样直接使用Dim来创建。
虽然非内置的数据类型定义默认不能直接使用Dim来创建,但是通过在VBA中添加引用,就可以将非内置的数据类型的定义简化,就像是内置类型一样。
通过点击VBA 代码编辑环境的菜单栏中的"工具"选项中的"引用",弹出引用选项卡,添加"Microsoft Scripting Runtime"引用,如下图所示:
在添加了引用之后,字典的声明的声明就变得跟内置的数据类型一样了,如以下代码所示:
Dim Dic As New Dictionary
不过这两种方法各有优缺点:
方法1:声明步骤多一个步骤,但是对编程环境要求低,代码便于移植到其他文档上面。
方法2:需要手动添加外部引用,未手动添加的情况下,会出现运行错误的提示,但能简化声明,并且在使用VBA编程环境编写代码时,有很好的代码补全功能。
具体使用哪一种方法,需要看个人的偏好及实际的应用情况。经过实际测试,方法2在Word上面无法使用,在Excel,PowerPoint,Outlook中运行良好,应该是Word中默认引用的某些库与"Microsoft Scripting Runtime"库冲突了,导致无法引用。
字典作为一种对象,与集合一样,同样提供了操作字典的方法,例如添加,删除,返回字典项等操作,同时,还提供反映字典当前的数据项总数的属性等。
下面通过一个具体例子,看看代码中是如何使用字典类型的:
Sub BaseCode3()'声明一个通用对象Dim Dic As Object'创建一个字典对象,并绑定到通用对象Set Dic = CreateObject("Scripting.Dictionary")'添加三个字典项键值对Dic.Add "ppt", "PowerPoint"Dic.Add "doc", "Word"Dic.Add "oe", "Outlook"'迭代输入已添加的数据项For Each Key In Dic.Keys Debug.Print "key = " & Key & " Item = " & Dic.Item(Key)Next'输出字典中的总的数据项个数Debug.Print "目前字典中共有 " & Dic.Count & "个数据项"'检查字典中是否存在指定的keyIf Dic.Exists("oe") Then Debug.Print "字典中存在名为oe的key"Else Debug.Print "字典中不存在名为oe的key "End If'移除名为"oe"的键值对Dic.Remove ("oe")'输出一项键值对后字典项的个数Debug.Print "目前字典中共有 " & Dic.Count & "个数据项"'再次检查是否存在指定的keyIf Dic.Exists("oe") Then Debug.Print "字典中存在名为oe的key"Else Debug.Print "字典中不存在名为oe的key "End If'移除所有键值对Dic.RemoveAll'输出移除所有项后字典项的个数Debug.Print "目前字典中共有 " & Dic.Count & "个数据项"End Sub
复制粘贴上述代码到VBA代码编辑窗口并运行,运行结果如下图所示:
通过立即窗口打印出来的调试信息可以看到,在创建了字典对象之后,首先添加了3个字典键值对,并将其依次输出,同时字典中数据项为3项,同时,在字典中查找到了存在指定的键"oe",随后将其键值对删除,并确认字典中已经不存在指定的键了,然后在移除所有的键值对后,确认字典中的数据项为0,上述就是VBA中字典的基本的声明及简单应用了。
觉得有用吗?想了解更多吗?下方扫码关注喔!