VBA這種依托于一個(gè)應(yīng)用程序的的運(yùn)行環(huán)境的代碼,,不同于直接直接的程序開發(fā),。VBA的數(shù)據(jù)的輸入與輸出是依托于Excel的工作表或word的工作頁面的。所以如Excel VBA的數(shù)據(jù),,既可是直接來源于工作表對(duì)象的數(shù)據(jù)輸入,,也可以是數(shù)組、字典,、集合的數(shù)據(jù)結(jié)構(gòu),,與工作表的數(shù)據(jù)區(qū)域形成相互映射。 對(duì)于文本文件,,我們可以理解為一個(gè)字符串(或一個(gè)字符串列表),,對(duì)于工作表,你也可以理解為一個(gè)二維數(shù)組,。字典可以理解為一個(gè)特殊的n行2列的二維數(shù)組,。 集合是VBA的一種內(nèi)置數(shù)據(jù)結(jié)構(gòu)對(duì)象,封裝了一些方法供用戶操作,??梢允褂眉蠘?gòu)造數(shù)據(jù)清單或數(shù)據(jù)源、或進(jìn)行數(shù)據(jù)統(tǒng)計(jì),、查詢,。 集合是用戶定制的一組數(shù)據(jù)信息,存放于一個(gè)一維數(shù)組中,,以便用戶隨時(shí)訪問,、增添、刪除同類信息,。 對(duì)于集合中的數(shù)據(jù)類型,,沒有任何限制。即集合中元素可以是各種類型的數(shù)值,、或文本,,或單元格區(qū)域,,或圖片等。
集合的聲明: dim col as new collection 1 集合方法集合作為內(nèi)置對(duì)象,封裝了了4個(gè)方法: 1.1 Add colObject.Add item[, key][, before][, after]
下面語句向集合增加一個(gè)對(duì)象TextBox1,,并定義該成員的關(guān)鍵字為tx1。 col.Add TextBox1, 'tx1' 然后,,下面兩句都可以向集合中增加一個(gè)TextBox2,,并把它放在成員TextBox1的前面。 col.Add '紅', 'red',,2 1.2 Count 返回集合中的項(xiàng)的個(gè)數(shù),。 1.3 Item() 通過集合中的索引(即集合中項(xiàng)的序號(hào))或鍵(假設(shè)該項(xiàng)添加到集合時(shí)指定了)檢索集合中的成員,。 1.4 Remove() 通過集合中的索引或鍵刪除集合中的成員。 對(duì)于內(nèi)置對(duì)象的方法及各方法的參數(shù),,在VBE內(nèi)編寫代碼時(shí),,會(huì)有提示: 2 集合中關(guān)鍵詞key的使用2.1 必須是文本型字符串值,如果是數(shù)值必須用Cstr()函數(shù)進(jìn)行轉(zhuǎn)換,; 2.2 key不能重復(fù)(這個(gè)和字典一樣),; 2.3 key結(jié)果不能反輸出。(item可以按key或者按Index順序輸出返回值),; 檢索 不存在的key值時(shí)會(huì)出錯(cuò),,沒有字典用法中 d.Exists 方法來容錯(cuò)。
3 集合相對(duì)于一維數(shù)組的優(yōu)勢(shì)所在既然集合是一個(gè)一維數(shù)組,,那么為啥不直接讓用戶自建一個(gè)一維數(shù)組來存儲(chǔ)信息,,而要開發(fā)集合對(duì)象方法這樣一個(gè)東東呢?應(yīng)該說是各取所需,,集合在特定場(chǎng)合下有一定優(yōu)勢(shì),。 總的來說是可以簡(jiǎn)化處理(添加,、刪除元素)過程,節(jié)省用戶寫代碼的時(shí)間,,也不容易錯(cuò),。 3.1 簡(jiǎn)化元素添加的操作 其中.Add添加時(shí),不需要地址,,總是自動(dòng)添加到集合數(shù)組中的最后一個(gè)位置,。 如果是自定義數(shù)組,也可以做到,,但可能會(huì)是這樣子:
雖然實(shí)際上集合方法中也是這么做的,但畢竟通過封裝和后臺(tái)運(yùn)行,,減少了用戶的麻煩,。 (讀取集合中元素時(shí),需要指定位置,,這個(gè)和普通數(shù)組并無差異(只有字典可以直接用關(guān)鍵詞key定位置)) 3.1 簡(jiǎn)化元素刪除的操作 直接刪去/抹去已經(jīng)不需要的某個(gè)特定位置的信息: s.Remove (i),,如:
刪去一維數(shù)組中第 i 個(gè)信息,需要同時(shí)自動(dòng)把數(shù)組大小縮減,。 對(duì)應(yīng)的普通數(shù)組做法就會(huì)比較復(fù)雜:
也許集合方法中也是這么做的,,但畢竟封裝、后臺(tái)運(yùn)行以后,,用戶就省心多了,。 字典方法有RemoveAll方法可以一下子全部刪去,而集合中只能一個(gè)一個(gè)來: 每次刪去第一個(gè)的方法:
或者每次刪去最后一個(gè)的方法:
顯然第一種方法,,每次刪去第一的做法更不容易錯(cuò),,也更簡(jiǎn)單 以下操作可以直接刪除全部元素: I 重新初始化集合s Set s = New Collection s成為一個(gè)已經(jīng)初始化了的沒有任何元素的空集合變量 II 變量s初始化: Set s = Nothing s成為一個(gè)變量類型為集合對(duì)象的空集合變量 4 集合操作實(shí)例
集合操作實(shí)例2:
5 集合與普通數(shù)組5.1 通常只在末尾添加元素 (添加時(shí)不用考慮定義數(shù)組的大小,即集合中數(shù)組大小是自適應(yīng)的) (也可以像插入工作表那樣,,在某個(gè)指定位置之前或之后插入,,但意義似乎不大) 5.2 不能改變已添加元素的內(nèi)容 5.3 可以任意刪除指定位置(指定順序位置/或指定key值)的元素 5.4 不管如何添加和刪除,集合中元素始終保持添加時(shí)的先后順序不變 6 集合與字典6.1 集合中可以反復(fù)添加相同內(nèi)容的信息(按順序作為新元素添加) 而字典的關(guān)鍵詞是不可以重復(fù)的,。(也可以說,,是相當(dāng)于以序號(hào)為關(guān)鍵詞建立了字典) 6.2 集合中元素可以Write in , 但不可以Rewrite (字典中key不可以改動(dòng),,但I(xiàn)tem可以任意改哦) 7 綜合實(shí)例
-End- |
|