久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

VBA進(jìn)階|使用集合collection構(gòu)造數(shù)據(jù)清單來與工作表交互

 今天George 2018-07-21

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ū)域,,或圖片等。

在VBA中,,工作簿worksheets、工作表workbooks,、形狀shapes等本身都是一些對(duì)象集合,。

集合的聲明:

dim col as new collection

1 集合方法

集合作為內(nèi)置對(duì)象,封裝了了4個(gè)方法:

1.1 Add

colObject.Add item[, key][, before][, after]

item 必需的,。任意類型的表達(dá)式,,指定要添加到集合中的成員。

key 可選的,。唯一字符串表達(dá)式,,指定可以使用的鍵字符串,代替位置索引來訪問集合中的成員,。

before/after 可選的,。表達(dá)式,指定集合中的相對(duì)位置,。

下面語句向集合增加一個(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ì)有提示:

VBA進(jìn)階|使用集合collection構(gòu)造數(shù)據(jù)清單來與工作表交互

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ò)。

Sub coltest()

Dim col As New Collection

col.Add '紅'

col.Add '黃'

col.Add '橙', , 2

col.Add '綠', 'green'

col.Add '青', 'cyan'

For i = 1 To col.Count

Cells(i, 1).Value = i

Cells(i, 2).Value = col(i)

Next i

Cells(col.Count 1, 2) = col('green')

End Sub

VBA進(jìn)階|使用集合collection構(gòu)造數(shù)據(jù)清單來與工作表交互

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ì)是這樣子:

Sub test2()

Dim arr()

For i=1 To 10

ReDim Preserve arr(1 To i)'每次在需要向一維數(shù)組中添加新元素時(shí),,需要先擴(kuò)大數(shù)組

arr(i)=i'然后再添加新元素

Next

End Sub

雖然實(shí)際上集合方法中也是這么做的,但畢竟通過封裝和后臺(tái)運(yùn)行,,減少了用戶的麻煩,。

(讀取集合中元素時(shí),需要指定位置,,這個(gè)和普通數(shù)組并無差異(只有字典可以直接用關(guān)鍵詞key定位置))

3.1 簡(jiǎn)化元素刪除的操作

直接刪去/抹去已經(jīng)不需要的某個(gè)特定位置的信息:

s.Remove (i),,如:

s.Remove (1)

s.Remove (s.Count) '刪除最后一個(gè)元素

刪去一維數(shù)組中第 i 個(gè)信息,需要同時(shí)自動(dòng)把數(shù)組大小縮減,。

對(duì)應(yīng)的普通數(shù)組做法就會(huì)比較復(fù)雜:

Sub test3()

ReDim arr(1 To 10)

For i = 1 To 10

arr(i) = i

Next

Rmv arr, 3 '子過程調(diào)用

End Sub

Sub Rmv(arr, j)

For i = j 1 To UBound(arr)

arr(i - 1) = arr(i)

Next

ReDim Preserve arr(1 To UBound(arr) - 1)

End Sub

也許集合方法中也是這么做的,,但畢竟封裝、后臺(tái)運(yùn)行以后,,用戶就省心多了,。

字典方法有RemoveAll方法可以一下子全部刪去,而集合中只能一個(gè)一個(gè)來:

每次刪去第一個(gè)的方法:

For i = 1 To s.Count

s.Remove (1)

Next

或者每次刪去最后一個(gè)的方法:

For i = 1 To s.Count

s.Remove (s.Count)

Next

顯然第一種方法,,每次刪去第一的做法更不容易錯(cuò),,也更簡(jiǎn)單

以下操作可以直接刪除全部元素:

I 重新初始化集合s

Set s = New Collection

s成為一個(gè)已經(jīng)初始化了的沒有任何元素的空集合變量

II 變量s初始化:

Set s = Nothing

s成為一個(gè)變量類型為集合對(duì)象的空集合變量

4 集合操作實(shí)例

Sub 集合操作實(shí)例()

'Dim s As Collection '定義s變量為集合對(duì)象

'Set s = New Collection '初始化集合對(duì)象s (否則無法使用)

Dim s As New Collection '推薦這句代碼,直接初始化,,可以不用再Set了

'集合s中添加元素的方法

For i = 1 To 10

s.Add i '對(duì)于集合s,,用Add方法可以加入集合元素

'當(dāng)然事實(shí)上你可以添加任意內(nèi)容來代替本例中的i

Next

'讀取集合中元素的方法

For i = 1 To s.Count '可以用Count屬性返回集合中元素總個(gè)數(shù)

t = s(i) '讀取集合s中第i個(gè)變量存入臨時(shí)變量t中

t = s.Item(i) '正規(guī)的代碼寫法應(yīng)該是這樣子(效果一樣,推薦用上一句更簡(jiǎn)明)

Debug.Print s(i) '在立即窗口中觀察s(i)的值

Next

'下面是集合s中元素刪除的方法

For i = 1 To s.Count '遍歷集合元素

s.Remove (1) '每次刪去第1個(gè)……直至全部刪除完畢 或直接簡(jiǎn)寫為: s.Remove 1

's.Remove (s.Count) '或者每次刪除最后一個(gè),,直至全部刪除完畢(推薦用上一句,,不容易錯(cuò))

'或簡(jiǎn)寫為 s.Remove s.Count

Debug.Print s.Count '在立即窗口中觀察集合s中剩余元素個(gè)數(shù)

Next

End Sub

集合操作實(shí)例2:

Sub 集合操作實(shí)例2()

Dim s As New Collection

s.Add 1, CStr(1)

For i = 2 To 20 Step 2

s.Add i, CStr(i), Int(Rnd * (i - 1) 1)

s.Add i 1, CStr(i 1), , Int(Rnd * i 1)

Next

For i = 1 To 20

t1 = s.Item(i) '按現(xiàn)在的順序返回集合元素

t2 = s.Item(CStr(i)) '按關(guān)鍵詞key返回集合元素

Cells(i, 1) = t1

Cells(i, 2) = t2

Next

[c1:d1] = Array(t1, t2)

End Sub

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í)例

Sub 統(tǒng)計(jì)當(dāng)前頁面控件()

Dim col As New Collection

Dim i%, j%

For Each sp In ActiveSheet.Shapes

col.Add sp

Next sp

Cells(1, 11) = '控件數(shù)量:' & col.Count

For i = col.Count To 1 Step -1

Cells(i 1, 11) = col.Item(i).Name

col.Remove i

Next i

End Sub

-End-

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購買等信息,,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請(qǐng)點(diǎn)擊一鍵舉報(bào),。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多