Excel VBA解读(149): 数据结构—集合的基本操作

论坛 期权论坛 期权     
完美Excel   2019-7-14 05:36   2953   0
学习Excel技术,关注微信公众号:
excelperfect

除了Excel对象模型中已经有的集合对象外,我们还可以创建自已的集合。有两种方式。

创建集合的第一种方式
首先,声明集合变量:
Dim colMyBooks As Collection
然后,在需要使用该集合前创建集合:
Set colMyBooks = New Collection

创建集合的第二种方式
也可以在声明的同时创建集合:
Dim colmybooks As New Collection

两种方式作用相同,都创建了一个名为colMyBooks的集合。第一种方式,先声明变量,只是在需要集合时再创建集合对象,事先不占用资源。

添加集合元素项
在创建集合对象后,可以使用Add方法给其添加元素项:
colMyBooks.Add "Algorithms"
在集合colMyBooks中添加元素“Algorithms”。

注意,当声明了集合变量后,在输入代码时,VBE会自动提示其具有的方法,如下图1所示。


图1

在添加集合元素时,还可以指定所添加元素的键值,如下图2所示。


图2

注意到,VBE给出的参数提示表明,Add方法具有4个参数。第1个参数指定元素内容,第2个参数指定元素的键值,第3个和第4个参数指定元素放置的位置。其中,集合中的键必须是唯一的,即每个集合元素对应唯一的键值。

我们在集合colMyBooks中添加2个元素,其中元素”Algorithms”的键为“算法”,元素“excelperfect”的键为“完美Excel”:
colMyBooks.Add "Algorithms", Key:="算法"
colMyBooks.Add Item:="excelperfect", Key:="完美Excel"

在指定位置插入元素
运行上述代码后,集合中的元素为:
Algorithms,excelperfect

现在,我要在它们中间插入一个元素“math”,可以使用下面的代码:
colMyBooks.Add Item:="math", Key:="数学", Before:="完美Excel"
此时,集合中的元素为:
Algorithms,math,excelperfect

上面的代码将键值作为Before参数的值,也可以将索引值作为其参数值:
colMyBooks.Add Item:="math", Key:="数学", Before:=2

参数Before将元素插入到指定元素的前面。同理,参数After将元素插入到指定元素之后。

获取/访问集合元素
可以使用索引值获取或访问集合中的元素:
colMyBooks(1)
将获取/访问集合colMyBooks中的第1个元素。


图3

其实上述代码中省略了Item方法,完整的代码如下:
colMyBooks.Item(1)
原因是,Item方法是集合的默认方法,因此可以省略。

也可以使用键值来访问/获取集合中的元素:
colMyBooks.Item("完美Excel")
结果为:
excelperfect

同样,由于Item方法为默认方法,上述代码可以简写为:
colMyBooks("完美Excel")

要访问/获取集合colMyBooks中的所有元素,可以使用下面的代码:
For i = 1 To colMyBooks.Count
   Debug.Print colMyBooks(i)
Next i
代码使用For循环遍历集合中的所有索引值,并根据索引值取得对应的元素项。代码中的:
colMyBooks.Count
返回集合中元素的数量。

也可以使用下面的代码访问/获取集合colMyBooks中的所有元素:
Dim col As Variant
For Each col In colMyBooks
   Debug.Print col
Next col

删除集合元素
使用Remove方法来删除集合中的元素。例如:
colMyBooks.Remove (1)
删除集合colMyBooks中的第1个元素。当然,也可以使用键值删除相对应的元素:
colMyBooks.Remove ("算法")

可以使用循环来删除集合中的所有元素:
For i = 1 To colMyBooks.Count
   colMyBooks.Remove (1)
Next i
注意,传递给Remove方法的参数值始终为1。

也可以再次使用下面的代码:
Set colMyBooks = New Collection
重置集合,即清空集合中的所有元素。

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:195
帖子:39
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP