前言凡是上过学校的人都使用过字典,从新华字典、成语词典,到英汉字典以及各种各样数不胜数的专业字典,字典是上学必备的、经常查阅的工具书。有了它们,我们可以很方便的通过查找某个关键字,进而查到这个关键字的种种解释,非常快捷实用。凡是上过EH论坛的想学习VBA里面字典用法的,几乎都看过研究过northwolves狼版主、oobird版主的有关字典的精华贴和经典代码。我也是从这里接触到和学习到字典的,在此,对他们表示深深的谢意,同时也对很多把字典用得出神入化的高手们致敬,从他们那里我们也学到了很多,也得到了提高。字典对象只有4个属性和6个方法,相对其它的对象要简洁得多,而且容易理解使用方便,功能强大,运行速度非常快,效率极高。深受大家的喜爱。本文希望通过对一些字典应用的典型实例的代码的详细解释来给初次接触字典和想要进一步了解字典用法的朋友提供一点备查的参考资料,希望大家能喜欢。给代码注释估计是大家都怕做的,因为往往是出力不讨好的,稍不留神或者自己确实理解得不对,还会贻误他人。所以下面的这些注释如果有不对或者不妥当的地方,请大家跟帖时指正批评,及时改正。字典的简介字典(Dictionary)对象是微软Windows脚本语言中的一个很有用的对象。附带提一下,有名的正则表达式(RegExp)对象和能方便处理驱动器、文件夹和文件的(FileSystemObject)对象也是微软Windows脚本语言中的一份子。字典对象相当于一种联合数组,它是由具有唯一性的关键字(Key)和它的项(Item)联合组成。就好像一本字典书一样,是由很多生字和对它们对应的注解所组成。比如字典的“典”字的解释是这样的:“典”字就是具有唯一性的关键字,后面的解释就是它的项,和“典”字联合组成一对数据。常用关键字英汉对照:Dictionary字典Key关键字Item项,或者译为条目错误!文档中没有指定样式的文字。字典对象的方法有6个:Add方法、Keys方法、Items方法、Exists方法、Remove方法、RemoveAll方法。Add方法向Dictionary对象中添加一个关键字项目对。object.Add(key,item)参数object必选项。总是一个Dictionary对象的名称。key必选项。与被添加的item相关联的key。item必选项。与被添加的key相关联的item。说明如果key已经存在,那么将导致一个错误。常用语句:DimdSetd=CreateObject(Scripting.Dictionary)d.Adda,Athensd.Addb,Belgraded.Addc,Cairo代码详解1、Dimd:创建变量,也称为声明变量。变量d声明为可变型数据类型(Variant),d后面没有写数据类型,默认就是可变型数据类型(Variant)。也有写成DimdAsObject的,声明为对象。2、Setd=CreateObject(Scripting.Dictionary):创建字典对象,并把字典对象赋给变量d。这是最常用的一句代码。所谓的“后期绑定”。用了这句代码就不用先引用c:\windows\system32\scrrun.dll了。3、d.Adda,Athens:添加一关键字”a”和对应于它的项”Athens”。4、d.Addb,“Belgrade”:添加一关键字”b”和对应于它的项”Belgrade”。5、d.Addc,“Cairo”:添加一关键字”c”和对应于它的项”Cairo”。Exists方法如果Dictionary对象中存在所指定的关键字则返回true,否则返回false。object.Exists(key)参数object必选项。总是一个Dictionary对象的名称。2字典的简key必选项。需要在Dictionary对象中搜索的key值。常用语句:Dimd,msg$Setd=CreateObject(Scripting.Dictionary)d.Adda,Athensd.Addb,Belgraded.Addc,CairoIfd.Exists(c)Thenmsg=指定的关键字已经存在。Elsemsg=指定的关键字不存在。EndIf代码详解1、Dimd,msg$:声明变量,d见前例;msg$声明为字符串数据类型(String),一般写法为DimmsgAsString。String的类型声明字符为美元号($)。2、Ifd.Exists(c)Then:如果字典中存在关键字”c”,那么执行下面的语句。3、msg=指定的关键字已经存在。:把指定的关键字已经存在。字符串赋给变量msg。4、Else:否则执行下面的语句。5、msg=指定的关键字不存在。:把指定的关键字不存在。字符串赋给变量msg。6、EndIf:结束If…Else…Endif判断。Keys方法返回一个数组,其中包含了一个Dictionary对象中的全部现有的关键字。object.Keys()其中object总是一个Dictionary对象的名称。常用语句:Dimd,kSetd=CreateObject(Scripting.Dictionary)d.Adda,Athensd.Addb,Belgraded.Addc,Cairok=d.Keys[B1].Resize(d.Count,1)=Application.Transpose(k)代码详解3错误!文档中没有指定样式的文字。1、Dimd,k:声明变量,d见前例;k默认是可变型数据类型(Variant)。2、k=d.Keys:把字典中存在的所有的关键字赋给变量k。得到的是一个一维数组,下限为0,上限为d.Count-1。这是数组的默认形式。3、[B1].Resize(d.Count,1)=Application.Transpose(k):这句代码是很常用很经典的代码,所以这里要多说一些。Resize是Range对象的一个属性,用于调整指定区域的大小,它有两个参数,第一个是行数,本例是d.Count,指的是字典中关键字的数量,整本字典中有多少个关键字,本例d.Count=3,因为有3个关键字。呵呵,是不是说多了。第二个是列数,本例是1。这样=左边的意思就是:把一个单元格B1调整为以B1开始的一列单元格区域,行数等于字典中关键字的数量d.Count,就是把单元格B1调整为单元格区域B1:B3了。=右边的k是个一维数组,是水平排列的,我们知道Excel工作表函数里面有个转置函数Transpose,用它可以把水平排列的置换成竖向排列。但是在VBA中不能直接使用该工作表函数,需要通过Application对象的WorksheetFunction属性来使用它。所以完整的写法是Application.WorksheetFunction.Transpose(k),中间的WorksheetFunction可省略。现在可以解释这句代码了:把字典中所有的关键字赋给以B1单元格开始的单元格区域中。Items方法返回一个数组,其中包含了一个Dictionary对象中的所有项目。object.Items()其中object总是一个Dictionary对象的名称。常用语句:Dimd,tSetd=CreateObject(Scripting.Dictionary)d.Adda,Athensd.Addb,Belgraded.Addc,Cairot=d.Items[C1].Resize(d.Count,1)=Application.Transpose(t)代码详解1、Dimd,t:声明变量,d见前例;t默认是可变型数据类型(Variant)。2、t=d.Items:把字典中所有的关键字对应的项赋给变量t。得到的也是一个一维数组,下限为0,上限为d.Count-1。这是数组的默认形式。3、[C1].Resize(d.Count,1)=Application.Transpose(t):有了上面Keys方法的解释这句代码就不用多说了,就是把字典中所有的关键字对应的项赋给以C1单元格开始的单元格区域中。Remove方法Remove方法从一个Dictionary对象中清除一个关键字,项目对。4字典的简object.Remove(key)其中object总是一个Dictionary对象的名称。key必选项。key与要从Dictionary对象中删除的关键字,项目对相关联。说明如果所指定的关键字,项目对不存在,那么将导致一个错误。常用语句:DimdSetd=CreateObject(Scripting.Dictionary)d.Adda,Athensd.Addb,Belgraded.Addc,Cairo……d.Remove(“b”)代码详解1、d.Remove(“b”):清除字典中”b”关键字和与它对应的项。清除之后,现在字典里只有2个关键字了。RemoveAll方法RemoveAll方法从一个Dictionary对象中清除所有的关键字,项目对。object.RemoveAll()其中object总是一个Dictionary对象的名称。常用语句:DimdSetd=CreateObject(Scripting.Dictionary)d.Adda,Athensd.Addb,Belgraded.Addc,Cairo……d.RemoveAll代码详解1、d.RemoveAll:清除字典中所有的数据。也就是清空这字典,然后可以添加新的关键字和项,形成一本新字典。字典对象的属性有4个:Count属性、Key属性、Item属性、CompareMode属性。Count属性返回一个Dictionary对象中的项目数。只读属性。5错误!文档中没有指定样式的文字。object.Count其中object一个字典对象的名称。常用语句:Dimd,n%Setd=CreateObject(Scripting.Dictionary)d.Adda,Athensd.Addb,Belgraded.Addc,Cairon=d.Count代码详解1、Dimd,n%:声明变量,d见前例;n被声明为整型数据类型(Integer)。一般写法为DimnAsInteger。Integer的类型声明字符为百分比号(%)。2、n=d.Count:把字典中所有的关键字的数量赋给变量n。本例得到的是3。Key属性在Dictionary对象中设置一个key。object.Key(key)=newkey参数:object必选项。总是一个字典(Dictionary)对象的名称。key必选项。被改变的key值。newkey必选项。替换所指定的key的新值。说明如果在改变一个key时没有发现该key,那么将创建一个新的key并且其相关联的item被设置为空。常用语句:DimdSetd=CreateObject(Scripting.Dictionary)d.Adda,Athensd.Addb,Belgraded.Addc,Cairod.Key(c)=d代码详解1、d.Key(c)=d:用新的关键字”d”来替换指定的关键字”c”,这时,字典中就没有关键字c了,只有关键字d了,与d对应的项是”Cairo”。6字典的简Item属性在一个Dictionary对象中设置或者返回所指定key的item。对于集合则根据所指定的key返回一个item。读/写。object.Item(key)[=newitem]参数object必选项。总是一个Dictionary对象的名称。key必选项。与要被查找或添加的item相关联的key。newitem可选项。仅适用于Dictionary对象;newitem就是与所指定的key相关联的新值。说明如果在改变一个key的时候没有找到该item,那么将利用所指定的newitem创建一个新的key。如果在试图返回一个已有项目的时候没有找到key,那么将创建一个新的key且其相关的项目被设置为空。常用语句:DimdSetd=CreateObject(Scripting.Dictionary)d.Adda,Athensd.Add