我们知道vba 是通过对象的概念来操控Excel 的单元格,工作表,工作簿直至excel 程序自身的。 有时候我们需要同时操作判断多个单元格,操控多个工作表,在多个excel文件间进行数据通讯与传递,我们就需要一个工具作为一个容器将相同的对象装载在一起以供使用和标识,集合的概念就应运而生了。 一、集合就是一个篮子 胡说VBA的看法:集合就是一个大篮子,负责装载同类型的对象。 设想如下场景:我们拎个篮子去菜市场买菜,黄瓜来几条,西红柿买几斤,茄子也来几个,甚至还买了几条鱼。 这些东西装在一个篮子里,这个篮子是集合嘛? 明显不是的,黄瓜,西红柿,茄子,鱼等不是相同类型的对象,不符合集合的定义。 装满各式蔬菜的篮子不是集合: 如果我们拎个篮子去买馒头,或者我们拎N个篮子去买菜(胡说老师脑子进水类型)我每个篮子只放相同的对象,比如只放馒头,只放萝卜,只放韭菜,不同蔬菜放进不同的篮子,那么每个篮子就都是不同对象的集合。 二、集合的命名规则微软习惯用装载的对象类型加上s 作为集合的定义名称。 我们用excel就是捧微软的碗,人家的规矩咱就得担着。 比如所有单元格的集合就是cells,工作表的集合worksheets,工作簿的集合workbooks。 好吧,我们拎个篮子去买馒头,我定义这个集合就叫馒头s,可以吧,因为篮子里面要装馒头嘛。 小时候我们学过达芬奇画鸡蛋的课文,其中达芬奇的老师说,请注意世界上绝对不存在两个完全一样的鸡蛋。同理我们买了一堆馒头装在叫馒头s的篮子里,我们要分辨每一个馒头并加以操作,比如拿出来吃掉,炸馒头片等等,怎么来辨识呢? 这里要指出集合的通用的辨识集合内元素的方法: index 与Item 方法 请注意这是通用的哦,可不只是馒头篮子可以这么用,萝卜篮子,WorkBooks 也一样如此。 Index 方法:指的是按一定顺序来标识。 比如我们强行规定(注意这个规定是随便定的)篮子里的馒头从上向下进行编号。第1个馒头到第开始n 个,也可能是从第0 个开始(这和当初集合的定义有关)。 例如:馒头s(1) ------- 就是篮子里按照某种顺序的第一个馒头,由1—n 我们就可以把篮子里的所有馒头都找到一遍。 但是有时候我们是想拿出有特性的馒头,比如说我要拿一个白而且圆的馒头出来,根据达芬奇鸡蛋原理我们知道每一个馒头都是不同的,那么我要拿出这个叫“白又圆”的馒头出来,可能我并不知道它在集合的什么位置,也不知道它是编号的几号,怎么找呢? 集合的 items :每个馒头都有自己的特性,据此起名,白又圆的,黑点的,尖一些的,大点的馒头,小点的。我们可以据此特性直接访问到对象,馒头s(“白又圆”),就找到了这个馒头。 我们可以根据上面的描述自行试验一下比如Worksheets(1)或者Worksheets(“sheet1”)这两种不同的方式来访问工作表。 集合的Count属性集合的Count 属性,返回集合中的元素个数。馒头s.Count 自然是返回篮子里有几个馒头,而Worksheets.count 则返回的是当前工作簿当中有几个工作表,Workbooks.Count 返回当前系统打开了几个工作簿文件。
一直有学生问胡说老师,为神马集合的Count 是属性而不是方法呢?难道你数篮子里的馒头有几个是没有动作的嘛?这里集合的思路主体是篮子,而不是我们这些人。不管你数与不数,篮子里的馒头个数在这一瞬间已经确定了的,篮子就是知道。 就像仓央嘉措说的: 你见或者不见我, 我就在那里, 不悲不喜 你念或者不念我, 情就在那里, 不来不去。 你数或者不数我, Count 就在那里 不增不减 这不就是面向对象的编程之道吗。
好,我们在这里把所有的集合的通用的属性方法和大家分享了一遍,即你是任何集合也好,上述的属性方法都是通用的实现。 当然还有一些比如在集合中添加删除元素啊等等,由于不同的集合有可能有不同的实现方法名,这里就不一一赘述了。 请注意:Excel VBA 中控制所有的对象都是用集合来实现的,因此我们后续要研究的名称,表格,数据透视表,图表等等对象都是一个个集合,一个个不同的篮子来控制的。因此本课对集合的认知是后续一切课程的基础。
思考题: 1、假如一个集合 馒头s 编号从1 开始,这个集合中已经装了一些馒头。那么编号最后的馒头是几号? 2、如果上面的集合编号是从0 开始呢,最后的馒头编号是几号? |
|