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