分享

VBA编程字典对象简介

 L罗乐 2018-07-14

 

引言    

字典是为字词提供音韵、意思的解释、例句用法等等的工具书。在西方,没有字典的概念,全是中国独有的。

基本上有过上学经历的人都不同程度的使用过字典,比如,新华字典,成语字典。外语类的英语字典,英汉字典,以及其他专业字典等等。现在我们用的多的可能是手机上字典app。总之,用字典这本工具书,我们很方便的通过查找某个字进而得到其注音、解释,很方便实用。

VBA里的字典对象

在vba知名论坛ExcelHome,又很多vba大神能够把vba里点字典对象用的活灵活现,出神入化地解决各类编程问题,然而,字典这个对象往往让很多初学vba编程的人望而却步,似乎感到难以弄懂。本文就对字典做一个简要的介绍。

字典(Dictionary)对象是微软Windows脚本语言中的一个很有用的对象。

附带提一下,有名的正则表达式(RegExp)对象和能方便处理驱动器、文件夹和文件的(FileSystemObject)对象也是微软Windows脚本语言中的一份子。(本段引自蓝桥玄霜曾经发的贴文)

实际vba里的字典初学者也可以和我们学习中的字典一样去理解,也是由唯一性的字和它对应的项目组成,这和我们学习中用过的字典是一样的,我们检索的字在检索页面里总是只会出现一次,是唯一的。一个字可以有多个解释条款。字就是vba字典里的Key,解释条款就是VBA 字典里的Item。一个key 对应一个item。

常用关键字英汉对照:

Dictionary  →  字典

Key       →        关键字

Item     →         项,或者译为 条款

如何使用??

vba里的字典是一个封装好的对象,位于一个dll文件中。要调用字典有两种方法

第一种,直接创建法:代码里直接写 set dic = CreateObject(“scriptting.dictionary” )dic就是一个字典对象了。

第二种,引用法:通过VBE编辑器里的工具-引用-浏览-找到scrrun.dll-确定。然后代码中以 “dim dic as new Dictionary”这种方式创建字典对象。

推荐引用法,这种方法创建的字典对象,编写代码的时候有属性方法的智能提示。

VBV 字典对象的属性

字典对象的属性有4个:Count属性、Key属性、Item属性、CompareMode属性。

Count属性

返回一个Dictionary对象中的项目数。只读属性。

     object.Count

其中 object一个字典对象的名称。

常用语句:

Dim d,n%  

   Set d =CreateObject('Scripting.Dictionary')

   d.Add 'a','Athens'  

   d.Add 'b','Belgrade'

   d.Add 'c','Cairo'

   n = d.Count

代码详解

1Dimd, n% :声明变量,d见前例;n被声明为整型数据类型(Integer)。一般写法为Dim n As Integer  Integer 的类型声明字符为百分比号 (%)

2n= d.Count  :把字典中所有的关键字的数量赋给变量n。本例得到的是3

 

 

Key属性

 Dictionary 对象中设置一个 key

object.Key(key) = newkey

参数:

object

必选项。总是一个字典 (Dictionary)对象的名称。

key

必选项。被改变的 key 值。

newkey

必选项。替换所指定的 key的新值。

说明

如果在改变一个 key 时没有发现该 key,那么将创建一个新的 key 并且其相关联的 item 被设置为空。

常用语句:

Dim d  

   Set d =CreateObject('Scripting.Dictionary')

   d.Add 'a','Athens'  

   d.Add 'b','Belgrade'

   d.Add 'c','Cairo'

   d.Key('c') = 'd'

代码详解

1d.Key('c')= 'd' :用新的关键字”d”来替换指定的关键字”c”,这时,字典中就没有关键字c了,只有关键字d了,与d对应的项是”Cairo”

 

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 且其相关的项目被设置为空。

常用语句:

Dim d  

   Set d =CreateObject('Scripting.Dictionary')

   d.Add 'a','Athens'  

   d.Add 'b','Belgrade'

   d.Add 'c','Cairo'

   MsgBox d.Item('c')

代码详解

1d.Item('c'):获取指定的关键字”c”对应的项。

2MsgBox   :是一个VBA函数,用消息框显示。


VBA字典对象的方法

字典对象的方法有6个:Add方法、Keys方法、Items方法、Exists方法、Remove方法、RemoveAll方法。

Add方法

 Dictionary 对象中添加一个关键字项目对。

object.Add(key, item)

参数

object

必选项。总是一个 Dictionary对象的名称。

key

必选项。与被添加的 item相关联的 key

item

必选项。与被添加的 key 相关联的 item

说明

如果 key 已经存在,那么将导致一个错误。

 

常用语句:

Dim d    

Set d = CreateObject('Scripting.Dictionary')

d.Add 'a', 'Athens'  

d.Add 'b', 'Belgrade'

d.Add 'c', 'Cairo'


代码详解

1Dimd :创建变量,也称为声明变量。变量d声明为可变型数据类型(Variant)d后面没有写数据类型,默认就是可变型数据类型(Variant)。也有写成Dimd As Object的,声明为对象。

2Setd = CreateObject('Scripting.Dictionary'):创建字典对象,并把字典对象赋给变量d。这是最常用的一句代码。所谓的“后期绑定”。用了这句代码就不用先引用c:\windows\system32\scrrun.dll了。

3d.Add'a', 'Athens':添加一关键字”a”和对应于它的项”Athens”

4d.Add'b', “Belgrade”:添加一关键字”b”和对应于它的项”Belgrade”

5d.Add'c', “Cairo”:添加一关键字”c”和对应于它的项”Cairo”

Keys方法

返回一个数组,其中包含了一个Dictionary 对象中的全部现有的关键字。

object.Keys( )

其中 object 总是一个 Dictionary 对象的名称。

 

常用语句:

Dim d, k  

   Set d =CreateObject('Scripting.Dictionary')

   d.Add 'a', 'Athens'  

   d.Add 'b','Belgrade'

   d.Add 'c','Cairo'

   k=d.Keys

   [B1].Resize(d.Count,1)=Application.Transpose(k)

代码详解

1Dimd, k :声明变量,d见前例;k默认是可变型数据类型(Variant)

2k=d.Keys:把字典中存在的所有的关键字赋给变量k。得到的是一个一维数组,下限为0,上限为d.Count-1。这是数组的默认形式。

3[B1].Resize(d.Count,1)=Application.Transpose(k):这句代码是很常用很经典的代码,所以这里要多说一些。

ResizeRange对象的一个属性,用于调整指定区域的大小,它有两个参数,第一个是行数,本例是d.Count,指的是字典中关键字的数量,整本字典中有多少个关键字,本例d.Count=3,因为有3个关键字。呵呵,是不是说多了。

第二个是列数,本例是1。这样=左边的意思就是:把一个单元格B1调整为以B1开始的一列单元格区域,行数等于字典中关键字的数量d.Count,就是把单元格B1调整为单元格区域B1B3了。

=右边的k是个一维数组,是水平排列的,我们知道Excel工作表函数里面有个转置函数Transpose,用它可以把水平排列的置换成竖向排列。但是在VBA中不能直接使用该工作表函数,需要通过Application对象的WorksheetFunction属性来使用它。所以完整的写法是Application. WorksheetFunction.Transpose(k),中间的WorksheetFunction可省略。现在可以解释这句代码了:把字典中所有的关键字赋给以B1单元格开始的单元格区域中。

Items方法

返回一个数组,其中包含了一个Dictionary 对象中的所有项目。

object.Items( )

其中 object 总是一个 Dictionary 对象的名称。

 

常用语句:

Dim d, t  

   Set d =CreateObject('Scripting.Dictionary')

   d.Add 'a','Athens'  

   d.Add 'b','Belgrade'

   d.Add 'c','Cairo'

   t=d.Items

   [C1].Resize(d.Count,1)=Application.Transpose(t)

代码详解

1Dimd, t :声明变量,d见前例;t默认是可变型数据类型(Variant)

2t=d.Items:把字典中所有的关键字对应的项赋给变量t。得到的也是一个一维数组,下限为0,上限为d.Count-1。这是数组的默认形式。

3[C1].Resize(d.Count,1)=Application.Transpose(t):有了上面Keys方法的解释这句代码就不用多说了,就是把字典中所有的关键字对应的项赋给以C1单元格开始的单元格区域中。

Exists方法

如果 Dictionary 对象中存在所指定的关键字则返回 true,否则返回 false

object.Exists(key)

参数

object

必选项。总是一个 Dictionary对象的名称。

key

必选项。需要在 Dictionary对象中搜索的 key 值。

 

常用语句:

Dim d, msg$  

   Set d =CreateObject('Scripting.Dictionary')

   d.Add 'a','Athens'  

   d.Add 'b','Belgrade'

   d.Add 'c','Cairo'

   Ifd.Exists('c') Then

      msg = '指定的关键字已经存在。'

   Else

      msg = '指定的关键字不存在。'

   End If

代码详解

1Dimd, msg$ :声明变量,d见前例;msg$ 声明为字符串数据类型(String),一般写法为Dim msg As StringString的类型声明字符为美元号 ($)

2Ifd.Exists('c') Then:如果字典中存在关键字”c”,那么执行下面的语句。

3msg= '指定的关键字已经存在。':把'指定的关键字已经存在。'字符串赋给变量msg

4Else:否则执行下面的语句。

5msg= '指定的关键字不存在。':把'指定的关键字不存在。'字符串赋给变量msg

6EndIf:结束If …Else…Endif判断。

Remove方法

Remove 方法从一个 Dictionary 对象中清除一个关键字,项目对。

object.Remove(key )

其中 object 总是一个 Dictionary 对象的名称。

key

必选项。key 与要从 Dictionary 对象中删除的关键字,项目对相关联。

说明

如果所指定的关键字,项目对不存在,那么将导致一个错误。

 

常用语句:

Dim d  

   Set d = CreateObject('Scripting.Dictionary')

   d.Add 'a','Athens'  

   d.Add 'b','Belgrade'

   d.Add 'c','Cairo'

   ……

   d.Remove(“b”)

代码详解

1d.Remove(“b”):清除字典中”b”关键字和与它对应的项。清除之后,现在字典里只有2个关键字了。

 

RemoveAll方法

RemoveAll 方法从一个 Dictionary 对象中清除所有的关键字,项目对。

object.RemoveAll( )

其中 object 总是一个 Dictionary 对象的名称。

常用语句:

Dim d  

   Set d =CreateObject('Scripting.Dictionary')

   d.Add 'a','Athens'  

   d.Add 'b','Belgrade'

   d.Add 'c','Cairo'

   ……

   d.RemoveAll

代码详解

1d.RemoveAll:清除字典中所有的数据。也就是清空这字典,然后可以添加新的关键字和项,形成一本新字典。

郑重声明&彩蛋
至此,本文就简要介绍了vba字典对象。本文用到的代码解释和代码例子均引自Excelhome论坛网友蓝桥玄霜网友分享的常见字典用法总结帖子。
感谢蓝桥无私分享。蓝版主当年还特意做了一个全面,详细的,附带详细使用实例的word文档供下载,在此附上下载链接,供看官下载学习。
Word版下载链接
Excel办公技巧与VBA
链接:https://pan.baidu.com/s/1Qk4IcLi9n4ZDwRqdtfLLIQ 密码:uxvh


    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多