今日学习目标
- 理解VBA中的对象概念
- 掌握对象属性和方法的访问
- 了解Excel对象模型层次
知识点
1. Excel对象模型
Application(应用程序)
└─ Workbooks(工作簿集合)
└─ Workbook
└─ Worksheets(工作表集合)
└─ Worksheet
└─ Range(单元格区域)VBA 对象模型怎么理解?把 Excel 想象成一家公司:Application 是公司本身,Workbook 是项目文件夹,Worksheet 是表格页,Range 是页上的格子。操作格子要沿层级链逐级定位,这就是 Workbooks(...).Worksheets(...).Range(...) 长引用的由来。
2. 访问对象
- 点号
.操作符:对象.属性或对象.方法 - 属性是对象的数据(如
Range.Value),方法是对象的动作(如Worksheets.Add) - 集合可按名称
Worksheets("Sheet1")或序号Worksheets(1)索引
3. 常用对象
- Application:代表整个Excel应用程序
- Workbook:代表一个工作簿
- Worksheet:代表一个工作表
- Range:代表单元格或区域
注意:ThisWorkbook 指代码所在的工作簿,ActiveWorkbook 指当前激活的,用户随时可能切换。正式脚本优先用 ThisWorkbook 加明确表名。
4. Range与Cells
Range("A1") 适合写死地址;Cells(行号, 列号) 接受变量,适合循环。
今日代码
vbaSub 对象示例()
' 访问Application对象
Application.Name
Application.Visible = True
' 访问Workbook对象
ThisWorkbook.Name
ActiveWorkbook.Path
' 访问Worksheet对象
Worksheets("Sheet1").Name
ActiveSheet.Range("A1").Value = "Hello"
' 访问Range对象
Range("A1").Value = "Hello"
Cells(1, 1).Value = "Hello"
End Sub对同一对象连续设置多个属性时,可用 With ... End With:把对象提出来,内部以点号开头,下面实战场景一节即用到。
实战场景
要把所有工作表的 A1 统一改成标题格式:
vbaSub 批量设置标题()
Dim ws As Worksheet
For Each ws In Worksheets
With ws.Range("A1")
.Value = "月度报表"
.Font.Bold = True
.Font.Size = 14
.Interior.Color = RGB(255, 200, 200)
End With
Next ws
End Subws 持有每张表的引用,.Range("A1") 都作用在这张表上,与激活状态无关。
练习题
- 打开指定工作簿
- 新建工作表并命名
- 设置A1单元格的值和格式
参考解答
1. 使用Workbooks.Open "文件路径"打开指定工作簿。 2. 使用Worksheets.Add创建新表,Sheets(1).Name = "新名称"命名。 3. Range("A1").Value = "内容"设置值,Range("A1").Font.Bold = True设置格式。
常见错误与排查
Run-time error '9': Subscript out of range——表名不存在或有空格差异,用?Worksheets(1).Name在立即窗口确认真实表名。Run-time error '424': Object required——对象变量赋值漏了Set:ws = Worksheets("Sheet1")应改为Set ws = ...。Run-time error '1004': Application-defined or object-defined error——Range 地址非法,如Range("A0"),动态位置改用Cells。- 数据写到了别的表——不带限定的
Range("A1")默认指向活动表,引用链写全。
延伸练习
- 遍历 Workbooks 集合,用 MsgBox 列出当前打开的工作簿名称。
- 用双重循环 +
Cells在 A1:E5 填入"行号×列号"的乘积,对角线加粗。 - 改造实战场景:只处理名称以"报表"开头的表(提示:
Left(ws.Name, 2))。
由在线工具箱(www.vba.net)整理制作