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

2019-07-19 16:20:25 浏览数 (1)

学习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

重置集合,即清空集合中的所有元素。

vba

0 人点赞