我們知道vba 是通過(guò)對(duì)象的概念來(lái)操控Excel 的單元格,工作表,工作簿直至excel 程序自身的。 有時(shí)候我們需要同時(shí)操作判斷多個(gè)單元格,操控多個(gè)工作表,在多個(gè)excel文件間進(jìn)行數(shù)據(jù)通訊與傳遞,我們就需要一個(gè)工具作為一個(gè)容器將相同的對(duì)象裝載在一起以供使用和標(biāo)識(shí),集合的概念就應(yīng)運(yùn)而生了。 一、集合就是一個(gè)籃子 胡說(shuō)VBA的看法:集合就是一個(gè)大籃子,負(fù)責(zé)裝載同類型的對(duì)象。 設(shè)想如下場(chǎng)景:我們拎個(gè)籃子去菜市場(chǎng)買菜,黃瓜來(lái)幾條,西紅柿買幾斤,茄子也來(lái)幾個(gè),甚至還買了幾條魚(yú)。 這些東西裝在一個(gè)籃子里,這個(gè)籃子是集合嘛? 明顯不是的,黃瓜,西紅柿,茄子,魚(yú)等不是相同類型的對(duì)象,不符合集合的定義。 裝滿各式蔬菜的籃子不是集合: 如果我們拎個(gè)籃子去買饅頭,或者我們拎N個(gè)籃子去買菜(胡說(shuō)老師腦子進(jìn)水類型)我每個(gè)籃子只放相同的對(duì)象,比如只放饅頭,只放蘿卜,只放韭菜,不同蔬菜放進(jìn)不同的籃子,那么每個(gè)籃子就都是不同對(duì)象的集合。 二、集合的命名規(guī)則微軟習(xí)慣用裝載的對(duì)象類型加上s 作為集合的定義名稱。 我們用excel就是捧微軟的碗,人家的規(guī)矩咱就得擔(dān)著。 比如所有單元格的集合就是cells,工作表的集合worksheets,工作簿的集合workbooks。 好吧,我們拎個(gè)籃子去買饅頭,我定義這個(gè)集合就叫饅頭s,可以吧,因?yàn)榛@子里面要裝饅頭嘛。 小時(shí)候我們學(xué)過(guò)達(dá)芬奇畫(huà)雞蛋的課文,其中達(dá)芬奇的老師說(shuō),請(qǐng)注意世界上絕對(duì)不存在兩個(gè)完全一樣的雞蛋。同理我們買了一堆饅頭裝在叫饅頭s的籃子里,我們要分辨每一個(gè)饅頭并加以操作,比如拿出來(lái)吃掉,炸饅頭片等等,怎么來(lái)辨識(shí)呢? 這里要指出集合的通用的辨識(shí)集合內(nèi)元素的方法: index 與Item 方法 請(qǐng)注意這是通用的哦,可不只是饅頭籃子可以這么用,蘿卜籃子,WorkBooks 也一樣如此。 Index 方法:指的是按一定順序來(lái)標(biāo)識(shí)。 比如我們強(qiáng)行規(guī)定(注意這個(gè)規(guī)定是隨便定的)籃子里的饅頭從上向下進(jìn)行編號(hào)。第1個(gè)饅頭到第開(kāi)始n 個(gè),也可能是從第0 個(gè)開(kāi)始(這和當(dāng)初集合的定義有關(guān))。 例如:饅頭s(1) ------- 就是籃子里按照某種順序的第一個(gè)饅頭,由1—n 我們就可以把籃子里的所有饅頭都找到一遍。 但是有時(shí)候我們是想拿出有特性的饅頭,比如說(shuō)我要拿一個(gè)白而且圓的饅頭出來(lái),根據(jù)達(dá)芬奇雞蛋原理我們知道每一個(gè)饅頭都是不同的,那么我要拿出這個(gè)叫“白又圓”的饅頭出來(lái),可能我并不知道它在集合的什么位置,也不知道它是編號(hào)的幾號(hào),怎么找呢? 集合的 items :每個(gè)饅頭都有自己的特性,據(jù)此起名,白又圓的,黑點(diǎn)的,尖一些的,大點(diǎn)的饅頭,小點(diǎn)的。我們可以據(jù)此特性直接訪問(wèn)到對(duì)象,饅頭s(“白又圓”),就找到了這個(gè)饅頭。 我們可以根據(jù)上面的描述自行試驗(yàn)一下比如Worksheets(1)或者Worksheets(“sheet1”)這兩種不同的方式來(lái)訪問(wèn)工作表。 集合的Count屬性集合的Count 屬性,返回集合中的元素個(gè)數(shù)。饅頭s.Count 自然是返回籃子里有幾個(gè)饅頭,而Worksheets.count 則返回的是當(dāng)前工作簿當(dāng)中有幾個(gè)工作表,Workbooks.Count 返回當(dāng)前系統(tǒng)打開(kāi)了幾個(gè)工作簿文件。
一直有學(xué)生問(wèn)胡說(shuō)老師,為神馬集合的Count 是屬性而不是方法呢?難道你數(shù)籃子里的饅頭有幾個(gè)是沒(méi)有動(dòng)作的嘛?這里集合的思路主體是籃子,而不是我們這些人。不管你數(shù)與不數(shù),籃子里的饅頭個(gè)數(shù)在這一瞬間已經(jīng)確定了的,籃子就是知道。 就像倉(cāng)央嘉措說(shuō)的: 你見(jiàn)或者不見(jiàn)我, 我就在那里, 不悲不喜 你念或者不念我, 情就在那里, 不來(lái)不去。 你數(shù)或者不數(shù)我, Count 就在那里 不增不減 這不就是面向?qū)ο蟮木幊讨绬帷?/p>
好,我們?cè)谶@里把所有的集合的通用的屬性方法和大家分享了一遍,即你是任何集合也好,上述的屬性方法都是通用的實(shí)現(xiàn)。 當(dāng)然還有一些比如在集合中添加刪除元素啊等等,由于不同的集合有可能有不同的實(shí)現(xiàn)方法名,這里就不一一贅述了。 請(qǐng)注意:Excel VBA 中控制所有的對(duì)象都是用集合來(lái)實(shí)現(xiàn)的,因此我們后續(xù)要研究的名稱,表格,數(shù)據(jù)透視表,圖表等等對(duì)象都是一個(gè)個(gè)集合,一個(gè)個(gè)不同的籃子來(lái)控制的。因此本課對(duì)集合的認(rèn)知是后續(xù)一切課程的基礎(chǔ)。
思考題: 1、假如一個(gè)集合 饅頭s 編號(hào)從1 開(kāi)始,這個(gè)集合中已經(jīng)裝了一些饅頭。那么編號(hào)最后的饅頭是幾號(hào)? 2、如果上面的集合編號(hào)是從0 開(kāi)始呢,最后的饅頭編號(hào)是幾號(hào)? |
|
來(lái)自: 建發(fā)圖書(shū) > 《xls》