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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM