Excel:集合(Collection)

一、概念.集合(Collection)

Collection集合是我们在使用类时最常用到的对象。
一个Collection对象代表一组相关的项目。
集合是一组数据信息,存放于一个一维数组中,以便用户随时访问、增添、删除同类信息。
当你事先不知道要存放数据的个数,或者你需要一种比数组下标存取机制更灵活的方法时,你就需要用到集合类。

二、声明语法.集合

集合的声明就单一很多了,因为集合和数组一样是VBA的内置对象,就可以直接用Dim声明,先看一下它的声明方法,如下图:

但是这样声明的list集合还未分配内存空间,还不能直接使用集合的属性和方法,必须为list集合分配一个New Collection内存空间,才可以使用集合的属性和方法,如下图:

我们看一下“本地窗口”中变量的值,在逐行运行代码时的状态,当运行第一行声明代码时,list的值为Nothing,可以理解为list存储的内容未知,当为list分配内存空间后,list的值就是空,可以理解为已知道list存的内容,只不过存储的内容为空而已,如下图:



<iframe height=500 width=500 src="http://ww4.sinaimg.cn/mw690/e75a115bgw1f3rrbzv1m8g209v0diqv7.gif">

所以就有很多初学者会问如下这样的问题,下图的声明①和声明②有何不同,为什么声明①会报错,而声明②就不会报错:

现在就很容易解释了,声明①仅仅声明了list可以指向一个集合,但未给list分配指向一个内存空间,所以在未分配内存空间的时候就无法使用集合的属性和方法,声明②声明了list2可以指向一个集合,同时也为list2分配了一个新的内存空间,已分配存储空间的集合变量才能使用集合的方法和属性。

三、使用.集合

建立集合的方法和建立其它对象一样,如:

Dim col As New Collection
集合建立后,可以使用Add方法添加成员,用Remove方法删除成员,用Item方法从集合中返回特定成员。
Private Sub CommandButton1_Click()
  Dim col As New Collection
  Dim i%
  Dim ct As Control
  For Each ct In Me.Controls
    If Left(ct.Name, 7) = "TextBox" Then col.Add ct
  Next ct
  For i = col.Count To 1 Step -1
    MsgBox "下面删除成员" & col.Item(i).Name
    col.Remove i
  Next i
End Sub

上面的代码先将窗体上所有的TextBox加入到集合中,然后再删除掉。Count属性返回集合的成员数量,Remove方法后面的参数是集合成员的索引号。成员的索引号通常是按照加入的顺序自然编号,从1开始,但可以在加入时使用Add方法的参数进行改变。Add方法的完整语法是:
object.Add item[, key][, before][, after]
item 必需的。任意类型的表达式,指定要添加到集合中的成员。
key 可选的。唯一字符串表达式,指定可以使用的键字符串,代替位置索引来访问集合中的成员。
before/after 可选的。表达式,指定集合中的相对位置。
下面语句向集合增加一个对象TextBox1,并定义该成员的关键字为tx1。
col.Add TextBox1, "tx1"
然后,下面两句都可以向集合中增加一个TextBox2,并把它放在成员TextBox1的前面。
col.Add TextBox2, , col.Count
col.Add TextBox2, , "tx1"
第一句中,因为只有一个成员,所以col.Count也是索引号

借鉴:
https://zhuanlan.zhihu.com/p/44510653

原文地址:https://www.cnblogs.com/kutsu/p/14111832.html