前面我们知道了写代码会用到哪些数据类型,如何将这些数据以常量、变量的形式来存储或者操作,这一节我们来讲集合、对象、属性和方法。
Office对象是VBA程序操控的核心,90%以上的VBA代码都是在操作对象,利用对象的方法来读取或写入对象的属性值,所以,要学习VBA编程就必须对office对象有一个全面的认识。很多人学vba很久,但还是只能写一些比较简单的vba代码,稍微难一点的操作就没办法实现了,主要就是因为对excel的对象、属性和方法不熟悉。

一、 对象
对象代表了应用程序中的元素,是我们用代码要操作和控制的一个实体。包括工作簿、工作表、工作表上的单元格区域、图表、控件、窗体等等。为了方便理解,我们可以举一个类比,比方说汽车是对象,汽车颜色就是属性了,而购买汽车这个动作则是一个方法,颜色属性和购买行为都是建立在汽车这个主体对象之上,没有了主体对象,就无所谓属性和方法了。
对象可以相互包含,就像一个文件里可以包含多个文件夹一样,而这个文件夹又可以被其他的文件夹包含,一个工作簿对象可以包含多个工作表对象,一个工作表对象又可以包含多个单元格(或图表、图形等),这种对象的排列模式称为Excel的对象模型。

比如下面这个图,excel对象之间的包含关系为:Application→Workbooks→Worksheets→Cells。即在一个excel应用程序中可以打开多个工作簿,而一个工作簿又可包含多个工作表(最多255个)。
最后需要特别说明一下的是,vba对象是程序的主题,但VBA过程是可以没有对象的哈,比如msgbox输出一个弹窗,就没有涉及到任何对象,不过这种代码单独用的对制表是没有任何意义的,因为它没有操作任何对象。
二、 集合
集合是一个包含几个其他对象的对象,是相同类型对象的统称,比如工作簿、汽车等。在Excel里,workbooks集合包含在Application对象里,当我们要引用某工作簿的时候,要遵循从大到小的规则。比如我们想引用D盘“我的文档”文件夹下的名为“我的VBA课程.docx”文件时要输入的是:D:\我的文档\我的VBA课程.docx。

三、 属性
对象的特征是由其属性决定的,因此VBA程序要获取对象的特征信息或者要改变对象的特征都需要通过操作具体的属性来实现。
1.属性的概念
属性是一个对象的属性,它定义了对象的特征,比如大小、颜色或者某一方面的行为,如对象是否有激活或者是否是可见的。(转到vb编辑器属性窗口)。
一方面,我们可以通过属性的返回值来检索对象的信息;另一方面,我们也可以通过修改对象的属性值来改变对象的特性。
需要特别注意的是,有些属性只允许读取,但不允许设置,即这类属性具有只读的特点。例如:

2.属性的读取和设置
在VBA中,读取属性和设置属性的语法格式如下:
对象.属性 读取属性值
对象.属性=值 设置属性值
对象.对象.属性
对象.对象.属性=值
属性一般理解为对象拥有的静态特性。这跟方法是有很大的区别的。
这里的“.”号为连接符,表示属性与对象的率属关系,即表明当前操作的属性是属于哪个对象的。
四、 方法
方法是系统事先为对象定义的特定功能,它能有效简化用户的编程,但对象方法只能被调用,而不能被修改。

1.方法的定义
方法指的是对象能执行的动作。例如,add是属于工作表集合的一个方法,使用该方法能在指定的位置插入一个或多个工作表。方法实际上类似于一个VB过程,但这种过程是有系统根据可能的需求事先定义且封装好的,其内部代码是不可见的,即我们只能按照方法的功能说明来使用方法,但不能对其进行修改。

1、对象与属性:我们可以把它看作是一回事,就像“属性/方法列表”里面的图标,它不区分谁是对象,谁是属性。世间事物,只要成了主,就有依附其存在的附属,“老刘汽车上的喇叭”,老刘是主,汽车是附属物,而汽车又是喇叭的主,喇叭是汽车的附属,用VBA的说法,老刘是对象,汽车是属性,但对于喇叭而言,汽车是对象,喇叭是属性。
2、方法与属性:除了内容不同外,在代码书写上,属性与方法也部相同。方法后面不再连着小圆点。"对象.方法"是指对对象执行某个操作,因此不需要等号,”对象.方法“已经是一句完整的代码。“对象.属性=值”是指对对象的某个属性赋值,单独的“对象.属性”不能成为一句完整的代码,必须有等号才行。如果通过代码读取对象的某个属性值,那么对象与对象的属性前面必须有等号或者函数。如果是修改对象的属性值,那么在属性后面必须有等号,用于赋值。如果只有对象及属性,那么代码是不完整的,无法执行。
















