在VBA中对象、属性、方法、事件是贯穿整个VBA编程最重要的概念
1.对象
1.1 对象的定义
- 对象是某一个类的实例。可以理解为用一个模子(class)刻出来的个体(object),它具有这个模子的所有属性和方法;
一个对象可以用
x.y
的形式被调用,如**Worksheet.range**
的方式调用range单元格对象1.2 对象的分类
一般对象被分为:
Application
、Workbook
、Worksheet
、Sheet
、Range
、Comment
、WorksheetFunction
、collection
、字典
、文件
等常见的对象一般为:
range
、worksheet
、workbook
、集合
、字典
、文件
等对象1.3 对象的集合
对象集合一般用于特指某一个对象使用,而对象分类中的名字一般用于定义对象使用。如特指名称为汇总的工作表,指定方式为:
**Worksheets("汇总")**
而非**Worksheet("汇总")**
对象集合一般用于特指某一个对象使用
对象集合一般为:
Workbooks
、Worksheets
、Sheets
、Comments
1.4 对象的层次结构
对象之间是有层次结构限制的,层次结构如下:
Application-Workbook-Worksheet-Range-Rows/Columns-Comment
按照以上层次结构,在指定对象时原则应一层一层指定,如
Application.Workbooks("汇总").Worksheets("汇总").Range("A1:B5")
。但这样这样指定郭于复杂。所以,一般如果为指定活动对象时可以省略上层父对象按照对象的层次结构又能分为父对象和子对象。父子对象的指定方式为:
父对象.子对象
,如Worksheets(2).Range("A1")
通过
子对象.Parent
可以锁定其父对象,如ActiveCell.Parent.Name
1.5 活动对象
活动对象就是现在正在操作的对象
- 指定活动对象下的自对象时可以使用
Activesheet.Range("A1")
或省略Activesheet直接使用Range("A1")
活动对象的分类:
Activesheet
、ActiveWorkbook
和Activecell
:::info多个打开的工作簿中,只有一个ActiveWorkbook和Activecell;
- 每一个工作簿都有一个Activesheet;
- Activecell就是在ActiveWorkbook下的Activesheet中选中的单元格。如果在Activesheet中选择了一个区域,那么Activecell就是其中变为白色的单元格;
- Activecell只能是一个单元格,不能是一个区域。
:::
2.属性
- 对象的属性一般是对象自身携带的一些样式或名称等,如range对象的单元格背景颜色,或工作表的名称等属性;
- 对象的属性根据其是否可以修改分为只读属性和可读可写属性;
- 只读属性可以返回属性结果,但不能对属性进行更改,如
**ActiveWorkbook.FullName**
。可读可写属性即能够读出属性结果,也可以对这个属性进行更改,如:**Worksheets(1).Name**
,即对属性重新赋值 ```vbnet Sub test()
Debug.Print ActiveSheet.Name ‘读取属性值 ActiveSheet.Name = “最终汇总” ‘写入属性值 Debug.Print ActiveSheet.Name ‘读取新写入的属性值
End Sub
:::info
输出结果:<br />汇总2<br />最终汇总
:::
<a name="pSCyW"></a>
# 3.方法
如果我们把对象的属性看作名词时,对象的方法就是一个动词
1. 对象的方法就是对这个对象要做什么样的操作;
2. 对象的方法中可能会涉及到参数,如`Range.Delete`删除单元格方法。删除后是下方单元格上移填补现在的单元格还是右边单元格左移填补现在的单元格就会涉及参数

3. 方法中参数的赋值方式有两种
1. 按照工作表函数方式进行赋值
2. `参数名:=参数值`的方式赋值
```vbnet
Sub test()
Range("C1").Delete (xlUp) '工作表方式()赋值
Range("C1").Delete shift:=xlUp '参数名:=参数值方式赋值
End Sub
4.事件
4.1 事件的基本概念
- 事件一般是某个条件被满足时自动触发的动作,如代开工作簿自动在A1单元格内记记录当前时间等功能
- 一般事件由对象、触发条件和参数组成
- 事件的分类:应用程序事件、工作簿事件和工作表事件
- 以上三种事件之间为包含关系;
- 工作簿事件代码应该放入ThisWorkbook中。工作表事件代码应该放入相应工作表中,且只在此工作表生效;