Excel:字典(Dictionary)
字典不是VBA内置的类型,它是Windows脚本语言的类型。所以声明字典的方法就和VBA内置对象不同,它有两种方法声明,一种是前期绑定声明,一种是后期绑定声明。
a.前期绑定
前期绑定是需要在工具菜单的引用对话框下首先引用对象库,在编译期完成绑定,这样的优点是在编码过程中可以直接看到字典对象引用的方法和属性的提示,缺点就是移植性差,如果换一个计算机运行VBA代码,也必须在新计算机上引用对象库。方法如下:在VBE菜单中,选择“工具-引用”,在弹出的对话框中选择中边的“浏览”,此时会打开Windows系统的驱动目录(32位系统请打开C:\Windows\System32)或者(64位系统请打开C:\Windows\SysWOW64),然后找到scrrun.dll,确定即可。确定后可以检查一下“Microsoft Scripting Runtime”是否已经勾选
添加引用后,就可以像定义其它变量一样声明字典了。
这样的优点就是对初学者来说,在输入变量和“.”之后,可以看到属性和方法的提示
b.后期绑定
后期绑定是指在运行代码的过程中创建对象,指定对象类型,不需要先声明。对于后期绑定来说,优点是移植性好,换个计算机运行VBA程序不需要设置引用对象库,缺点是编码时不会有提示。方法如下:
小结一下数组,集合和字典的声明方法:
①数组和集合都是VBA的内置对象,都可以直接使用Dim声明 ,而字典不是VBA的内置对象,必须引用对象库后才能用Dim声明,或者在代码中用后期绑定声明。
②数组、集合和字典都必须分配了内存空间才能使用属性和方法,数组分配内存空间就是确定数组的长度,集合分配内存空间就是New一个Collection,字典分配内存空间就是New一个Dictionary或CreateObject。
1. 创建和使用Dictionary对象
Dim objMyData
Set objMyData = Server.CreateObject(“Scripting.Dictionary”)
2.Dictionary对象的成员概要
属 性 说 明
CompareMode (仅用于VBScript)设定或返回键的字符串比较模式
Count 只读。返回Dictionary里的键/条目对的数量
Item(key) 设定或返回指定的键的条目值
Key(key) 设定键值
方 法 说 明
Add(key,item) 增加键/条目对到Dictionary
Exists(key) 如果指定的键存在,返回True,否则返回False
Items() 返回一个包含Dictionary对象中所有条目的数组
Keys() 返回一个包含Dictionary对象中所有键的数组
Remove(key) 删除一个指定的键/条目对
RemoveAll() 删除全部键/条目对
3. 对Dictionary中增加和删除条目
objMyData.Add “MyKey”, “MyItem” ‘Add Value MyItem with key MyKey
objMyData.Add “YourKey”, ”YourItem” ‘Add value YourItem with key YourKey
blnIsThere = objMyData.Exists(“MyKey”) ‘Returns True because the item exists
strItem = objMyData.Item(“YourKey”) ‘Retrieve value of YourKey
strItem = objMyData.Remove(“MyKey”) ‘Retrieve and remove YourKey
objMyData.RemoveAll ‘Remove all the items
4. 修改键或条目的值
可以通过修改键的值,或通过修改与特定的键关联的条目的数据,来改变存储在Dictionary内的数据。下面的代码改变键为MyKey的条目中的数据。
ObjMyData.Item(“MyKey”) = “NewValue” ‘ In VBScript
6. 遍历Dictionary
arrKeys = objMyData.Keys ‘Get all the keys into an array
arrItems = objMyData.Items ‘Get all the items into an array
For intLoop = 0 To objMyData.Count –1 ‘Iterate through the array
StrThisKey = arrKeys(intLoop) ‘This is the key value
StrThisItem = arrItems(intLoop) ‘This is the item (data) value
Next
在VBScript里也可以使用For Each … Next语句完成同样的功能:
‘ Iterate the dictionary as a collection in VBScript
For Each objItem in arrItems
Response.Write objItem & “ = “ & arrItems(objItem) & “<BR>”
Next