对象是Excel VBA编程的核心,在Excel中进行编程的整个过程几乎都离不开对象。打开一个工作簿,新建一个工作表,在单元格中输入数据,这些操作中的工作簿、工作表、单元格都是对象。本文将介绍对象编程的基本概念,包括Excel对象模型、类和对象、使用对象浏览器查看类和对象的相关信息、引用集合中的对象、父对象与子对象等内容。
一、Excel对象模型
虽然在Excel中编程会涉及大量的VBA语言元素和语法规则,但是它们操作的主体都是Excel对象。整个Excel程序由大量的对象组成,Excel程序本身就是一个对象,其内部的工作簿、工作表、单元格也都是不同的对象,所有这些对象按照特定的逻辑结构组成了Excel对象模型。
Application对象位于Excel对象模型的顶层,它表示Excel程序本身。在Excel程序中可以创建很多个工作簿,每个工作簿都是一个Workbook对象。每个工作簿可以包含很多个工作表,每个工作表都是一个Worksheet对象。每个工作表又包含很多个单元格,每个单元格或单元格区域都是一个Range对象。上述几种对象的层次结构可以表示为如下形式。Excel对象模型中的其他对象可以在此基本结构的基础上继续扩展,从而构成复杂的体系结构。
Application→Workbook→Worksheet→Range
Excel VBA帮助系统提供了Excel对象模型中每一个对象的详细说明。由于Excel对象模型中包含上百个对象,所以在短时间内掌握所有对象几乎是不现实的,可以先学习较常用的对象,然后再逐步扩展到其他对象。
二、类与对象
类是面向对象程序设计中的一个重要概念。可以将类想象成Excel中的工作簿模板,所有新建的工作簿都是基于工作簿模板创建的,这些新建的工作簿继承了工作簿模板中的内容、格式设置和其他特性。可以根据需要,在创建工作簿后对工作簿中的内容和格式进行自定义设置,从而使工作簿中的内容和格式不同于其他工作簿。
对于类而言,所有新建的对象都是基于类创建的,这些对象称为类的实例,它们继承了类的属性、方法和事件。可以根据需要,在创建对象后通过设置对象的属性、方法和事件,使同一类对象具有不同的特征和行为方式。例如,工作簿中的每一个工作表都是一个Wordsheet对象,通过修改工作表的名称和标签颜色,可以使各个工作表具有不同的名称和标签颜色。
三、使用对象浏览器查看类和对象的相关信息
在Excel中编程遇到的主要困难之一是很难掌握复杂的Excel对象模型中各对象之间的关系,以及每个对象所包含的属性和方法。Excel提供了一个用于查询类、对象、集合、属性、方法、事件、常数的易用工具——对象浏览器。打开VBE窗口,可以使用以下几种方法打开对象浏览器:
1.单击菜单栏中的“视图”|“对象浏览器”命令。
2.单击“标准”工具栏中的“对象浏览器”按钮。
3.按F2键。
打开的对象浏览器如图1所示。由于在“工程/库”中默认选择的是“所有库”,因此在“类”列表中会显示当前引用的所有库以及当前工程中包含的所有类。如果想要查看某个库中包含的内容,则可以在“工程/库”列表中选择一个特定的库,“类”列表会自动显示所选库中的类。在“类”列表中选择一个类,右侧会显示该类的成员,即类的属性、方法和事件。如果想要快速查找特定信息,可以在搜索框中输入信息的名称,然后单击右侧的搜索按钮。下方会显示搜索结果,可以单击按钮显示或隐藏搜索结果。

图1
在对象浏览器中使用不同的图标来区分不同内容,库、类,对象的属性、对象的方法,对象的事件,常数都有不同的图标标注。
四、引用集合中的对象
同一类对象组成了该类对象的集合,对象是集合中的成员。在Excel对象模型中存在着很多对象以及与其对应的集合,例如Worksheet对象和Worksheets集合,Worksheet表示一个工作表,Worksheets表示一个工作簿中的所有工作表。在拼写形式上,集合比其相关的对象在名称末尾多了一个字母s。
有时需要引用集合中的某个对象,可以使用对象的名称或索引号来引用集合中的对象。例如,如果工作簿中包含从左到右依次排列的名为“1月”“2月”和“3月”的3个工作表,那么当需要引用名为“2月”的工作表时,可以使用以下两种方法:
使用名称进行引用:Worksheets("2月")
使用索引号进行引用:Worksheets(2)
第一种方法最安全,只要不改变工作表的名称,即使调整工作表的排列顺序,使用同一个名称始终都引用同一个工作表。而第二种方法引用的是位于第2个位置上的工作表,如果调整工作表的顺序,那么位于第2个位置上的工作表就不一定是名为“2月”的工作表了,因此在引用特定工作表时使用第二种方法并不安全。
需要注意的是,如果引用的工作表所在的工作簿是当前活动的工作簿,那么可以直接使用上面的形式来引用。如果要引用的工作表所在的工作簿不是活动工作簿,那么必须添加工作簿的限定,类似于如下所示:
Workbooks("一季度").Worksheets("2月")
五、父对象与子对象及其定位方法
Excel对象模型中的各个对象彼此交错关联,形成了相对复杂的层次结构。前面介绍的Application对象位于Excel对象模型的顶层,Workbook对象位于Application对象的下一层,Worksheet对象又位于Workbook对象的下一层。可以将处于上一层的对象称为父对象,将处于下一层的对象称为子对象。那么在上面的例子中,Workbook对象的父对象是Application对象,Workbook对象的子对象是Worksheet对象。
大多数对象都有一个Parent属性,使用该属性可以返回对象的父对象。下面的代码返回名为“2月”的工作表所在的工作簿的名称:
Worksheets("2月").Parent.Name
由于Worksheet对象的父对象是Workbook对象,因此Worksheets(“2月”).Parent返回的是名为“2月”的工作表所在的工作簿的Workbook对象,之后使用该对象的Name属性返回了工作簿的名称。
如果希望返回名为“2月”的工作表所在的Excel程序的版本号,那么可以使用下面的代码,通过Parent属性从当前对象依次返回上一层的父对象,直到Application对象为止。第一个Parent属性返回的是Worksheet对象的父对象,即Workbook对象。第二个Parent属性是Workbook对象的属性,因此返回Workbook对象的父对象,即Application对象。
Worksheets("2月").Parent.Parent.Name
如果对象的层次级别很低,那么在上面的代码中可能需要使用更多的Parent属性。实际上Excel提供了从任意层级的对象直接跳转到顶层对象的方法,即对象的Application属性,大多数对象都包含该属性。因此,可以将前面的代码修改为以下形式:
Worksheets("2月").Application.Version
评论前必须登录!
注册