第1章 VBA编程概述 1
1.1 VBA应用领域和发展现状 1
1.1.1 美国的VBA水平 1
1.1.2 日本的VBA水平 2
1.1.3 VBA专家考试 3
1.2 Office与VBA的安装 3
1.2.1 安装DAEMON Tools Lite 5
1.2.2 Office 2003的安装 6
1.2.3 Office 2010的安装 10
1.3 Office版本 12
1.3.1 界面的变化 13
1.3.2 文件格式的革新 14
1.3.3 Office版本对VBA编程的影响 15
1.4 Office VBA编程开发的产品类型 15
1.4.1 基于Office文件的编程开发 15
1.4.2 Visual Basic 6封装 16
1.4.3 VSTO开发 16
1.5 高效学习VBA编程 16
1.5.1 必备基础 16
1.5.2 学习计划 17
习题 17
第2章 宏的编写和执行 18
2.1 编程前的设定 18
2.1.1 显示“开发工具”选项卡 18
2.1.2 设置宏安全性 19
2.2 开始VBA宏编程 20
2.2.1 手工编写第一个VBA宏 20
2.2.2 录制宏 21
2.3 VBA代码的保存 23
2.4 宏的执行方法 24
2.4.1 使用“宏”对话框 25
2.4.2 使用快捷键 25
2.4.3 指定宏到图形对象 26
2.4.4 使用工作表事件运行宏 26
2.4.5 使用工作簿事件运行宏 28
2.4.6 指定宏到功能区 28
2.4.7 指定宏到快速访问工具栏 30
2.4.8 通过立即窗口执行宏 31
习题 31
第3章 VBA编程环境 32
3.1 VBA编辑器界面介绍 32
3.1.1 立即窗口 33
3.1.2 本地窗口 35
3.1.3 属性窗口 35
3.1.4 对象浏览器 36
3.1.5 代码的查找和替换 37
3.1.6 VBA选项 38
3.1.7 外接程序管理器 39
3.1.8 VBA帮助 40
3.2 VBA工程管理 42
3.2.1 添加模块 42
3.2.2 移除模块 42
3.2.3 导出和导入模块 43
3.2.4 修改工程属性 43
3.2.5 工程引用 44
习题 45
第4章 VBA语法基础 46
4.1 VBA数据类型 46
4.1.1 字符串 47
4.1.2 数值型 48
4.1.3 日期和时间型 49
4.1.4 布尔型 49
4.1.5 变体型 50
4.1.6 对象型 50
4.1.7 数据类型的判断 51
4.1.8 变量声明的简写形式 54
4.1.9 变量声明的初始默认值 54
4.1.10 数据类型的转换 55
4.2 表达式与运算符 56
4.2.1 算术运算符 56
4.2.2 比较运算符 57
4.2.3 Like运算符 58
4.2.4 逻辑运算符 59
4.3 使用变量 60
4.3.1 变量命名 60
4.3.2 变量的声明 60
4.3.3 变量的赋值 61
4.3.4 变量的作用范围和生存期 63
4.3.5 声明变量的其他写法 64
4.4 使用常量 64
4.4.1 自定义常量 64
4.4.2 内置枚举常量 65
4.5 其他数据类型 68
4.5.1 自定义类型 68
4.5.2 枚举类型 69
4.5.3 集合 70
4.6 使用InputBox输入对话框 72
4.6.1 VBA库中的InputBox 72
4.6.2 Excel库中的InputBox 73
4.7 使用MsgBox输出对话框 75
4.8 顺序结构 77
4.9 条件选择结构 77
4.9.1 If语句 78
4.9.2 Select语句 79
4.9.3 Choose语句 82
4.9.4 Switch语句 82
4.10 循环结构 83
4.10.1 While…Wend语句 83
4.10.2 Do…Loop语句 84
4.10.3 For语句 86
4.10.4 ForEach语句 87
4.11 流程跳转控制语句 88
4.11.1 GoTo语句 88
4.11.2 GoSub…Return语句 89
4.11.3 Exit语句 90
4.11.4 End语句 90
4.12 数组 91
4.12.1 一维数组 91
4.12.2 二维数组 93
4.12.3 使用Array创建数组 94
4.12.4 对象数组 95
4.12.5 变体数组 96
4.12.6 动态数组 96
4.13 代码优化 97
4.13.1 同一行书写多条语句 98
4.13.2 长语句的续行书写 98
4.13.3 使用缩进 98
4.13.4 使用模块定义 102
4.13.5 使用注释 103
4.13.6 使用With结构 104
4.13.7 使用Me关键字 106
习题 107
第5章 过程与函数设计 108
5.1 过程 108
5.1.1 创建过程 108
5.1.2 过程的运行和调用 109
5.1.3 过程的参数 110
5.1.4 可选和默认参数 112
5.1.5 参数的传递方式 113
5.1.6 参数数量可变的过程 114
5.1.7 数组作为参数 114
5.2 函数 115
5.2.1 自定义函数的返回值 116
5.2.2 自定义函数的用途 116
5.2.3 设置自定义函数的说明信息 119
5.2.4 为自定义函数创建帮助文档 121
习题 127
第6章 程序调试和错误处理 128
6.1 程序调试技巧 128
6.1.1 单步执行程序 128
6.1.2 设置断点 130
6.1.3 使用Stop语句 130
6.2 错误处理 131
6.2.1 Err对象 132
6.2.2 遍历错误号和错误描述 133
6.2.3 故意引发错误 133
6.3 错误跳转 134
6.3.1 错误发生时跳转到某行 134
6.3.2 错误发生时继续向下执行 136
6.3.3 Resume与ResumeNext语句 136
习题 137
第7章 字符串处理 139
7.1 认识字符串 140
7.1.1 全角与半角 140
7.1.2 子字符串 140
7.1.3 字符串的长度 141
7.1.4 检索子字符串的位置 142
7.2 字符串转换 144
7.2.1 字符与ASCII码 144
7.2.2 大小写转换 145
7.2.3 全半角转换 146
7.2.4 去除多余空格 146
7.2.5 倒序 147
7.2.6 替换 147
7.3 字符串生成 149
7.3.1 String函数 149
7.3.2 Space函数 149
7.4 字符串与数组 149
7.4.1 Split函数 149
7.4.2 Join函数 151
7.4.3 Filter函数 151
习题 152
第8章 数学计算与日期处理 154
8.1 数学函数 154
8.1.1 三角函数计算 154
8.1.2 随机数 155
8.2 日期与时间函数 156
8.2.1 返回与设置当前日期时间 157
8.2.2 计算程序运行时间 157
8.2.3 日期时间的生成 158
8.2.4 日期时间的加减运算 159
8.2.5 计算两个日期的间隔 160
8.2.6 日期时间的分解 161
习题 161
第9章 Excel VBA对象模型 162
9.1 对象和对象类型 162
9.1.1 属性 162
9.1.2 方法 163
9.1.3 事件 163
9.1.4 父子对象 164
9.2 使用对象变量 164
9.2.1 With结构 166
9.2.2 集合对象 167
9.3 Excel VBA对象 170
9.3.1 应用程序对象 171
9.3.2 工作簿对象 171
9.3.3 表对象 171
9.3.4 单元格区域对象 171
习题 172
第10章 应用程序Application对象 173
10.1 Application对象重要成员 173
10.1.1 ActiveWorkbook 173
10.1.2 ActiveSheet 173
10.1.3 ActiveWindow 174
10.1.4 ActiveCell 174
10.1.5 Addins 175
10.1.6 COMAddins 176
10.1.7 WorksheetFunction 178
10.1.8 Commandbars 179
10.2 Application对象重要属性 180
10.2.1 默认文件路径DefaultFilePath属性 180
10.2.2 显示剪贴板DisplayClipboardWindow属性 181
10.2.3 启用事件EnableEvents属性 182
10.2.4 显示“开发工具”选项卡ShowDevTools属性 182
10.2.5 句柄Hwnd属性 182
10.2.6 标题Caption属性 183
10.2.7 版本Version属性 183
10.2.8 用户名UserName属性 184
10.2.9 安装路径Path属性 185
10.2.10 状态栏StatusBar属性 186
10.2.11 默认工作表个数SheetsInNewWorkbook属性 187
10.2.12 窗口状态WindowState属性 187
10.2.13 最近打开的文件RecentFiles 188
10.3 Application对象常用方法 189
10.3.1 激活其他组件ActivateMicrosoftApp方法 189
10.3.2 设置Excel的计算模式 189
10.3.3 计算Calculate方法 190
10.3.4 表达式评价Evaluate方法 190
10.3.5 快捷键OnKey方法 191
10.3.6 发送按键SendKeys方法 192
10.3.7 运行宏Run方法 193
10.3.8 退出应用程序Quit方法 195
10.3.9 定时执行OnTime方法 195
10.3.10 撤销Undo方法 196
10.4 Application对象常用事件 196
10.4.1 WorkbookBeforeClose事件 198
10.4.2 事件的取消 199
10.4.3 禁用和启用事件 199
10.4.4 SheetSelectionChange事件 199
10.4.5 WindowActivate事件 200
10.4.6 归纳总结 201
习题 201
第11章 工作簿Workbook对象 202
11.1 工作簿对象的表达 202
11.1.1 利用索引值 202
11.1.2 利用工作簿名称 202
11.1.3 宏代码所在的工作簿 202
11.1.4 活动工作簿 203
11.2 Workbook对象重要属性 204
11.2.1 文档内置属性BuiltinDocumentProperties 205
11.2.2 文档自定义属性CustomDocumentProperties 207
11.2.3 工作簿的名称和路径 208
11.2.4 IsAddin属性 208
11.2.5 Saved属性 209
11.2.6 工作簿的窗口 209
11.3 Workbook对象重要方法 214
11.3.1 新建工作簿 214
11.3.2 打开工作簿 215
11.3.3 设置工作簿的打开密码 215
11.3.4 保存工作簿 216
11.3.5 另存工作簿 216
11.3.6 关闭工作簿 217
11.3.7 激活工作簿 217
11.3.8 保护工作簿 218
11.3.9 导出为PDF文档 218
11.4 Workbook对象常用事件 221
11.4.1 工作簿打开和关闭前事件 222
11.4.2 文档事件过程中Cancel参数的作用 223
11.4.3 工作表激活事件 223
11.4.4 工作表右击事件 224
11.4.5 工作表修改事件 225
11.4.6 工作表选中区域变更事件 226
习题 226
第12章 工作表Worksheet对象 227
12.1 工作表集合Worksheets对象 228
12.1.1 表的遍历 229
12.1.2 表的增加 230
12.1.3 表的删除 231
12.2 Worksheet对象常用属性 233
12.2.1 单元格属性 233
12.2.2 Name与CodeName属性 234
12.2.3 前一个与后一个工作表 235
12.2.4 应用程序与父级对象 236
12.2.5 工作表标签颜色 236
12.2.6 是否显示分页符 237
12.2.7 工作表的可见性 237
12.2.8 页面设置 238
12.3 工作表的自动筛选 240
12.3.1 工作表的3种状态 241
12.3.2 遍历筛选器 244
12.3.3 处理自动筛选后的区域 245
12.3.4 按照单元格填充颜色筛选 247
12.3.5 按照单元格字体颜色筛选 248
12.4 Worksheet对象常用方法 248
12.4.1 激活和选中工作表 249
12.4.2 工作表的移动和复制 250
12.4.3 控制工作表的计算 251
12.4.4 设定背景图片 252
12.4.5 复制和粘贴数据 253
12.4.6 使用记录窗体 254
12.4.7 工作表的保护 255
12.4.8 工作表的预览和打印 256
12.5 Worksheet对象重要事件 258
12.5.1 选中区域变更事件 259
12.5.2 工作表修改事件 261
12.5.3 工作表右击事件 263
12.5.4 使用类模块操作Excel文档事件 265
习题 266
第13章 图表Chart对象 267
13.1 Chart对象重要属性 269
13.1.1 图表的构成 269
13.1.2 读写图表类型 270
13.1.3 修改图表数据源 270
13.1.4 设置图表标题 271
13.1.5 设置图表区与绘图区格式 273
13.1.6 设置坐标轴格式 274
13.1.7 操作数据系列 275
13.1.8 遍历数据系列 276
13.1.9 操作数据点 277
13.1.10 操作数据标记 278
13.1.11 操作图例 279
13.2 Chart对象常用方法 280
13.2.1 图表工作表的删除 280
13.2.2 图表复制为图片 281
13.2.3 改变图表位置 281
13.3 Chart对象事件 282
13.3.1 激活图表工作表的事件 282
13.3.2 识别图表中的不同元素 282
13.4 自动创建图表 284
13.4.1 创建图表工作表 284
13.4.2 在普通工作表中插入图表 285
13.5 自动删除图表 286
13.5.1 删除所有图表工作表 286
13.5.2 删除工作表中所有图表对象 287
习题 287
第14章 单元格区域Range对象 288
14.1 Range对象的表示方法 290
14.1.1 使用Cells 290
14.1.2 Range对象的无限嵌套性 292
14.2 Range对象的常用属性 293
14.2.1 区域地址 293
14.2.2 获取单元格区域的位置与大小 294
14.2.3 单元格的地理位置 295
14.2.4 单元格内容属性 299
14.3 Range的产生和转化 305
14.3.1 引用工作表已使用区域 305
14.3.2 引用当前连续区域 306
14.3.3 引用数组公式区域 307
14.3.4 引用整行与整列 307
14.3.5 单元格的偏移 308
14.3.6 改变单元格区域大小 308
14.3.7 获取最后一个非空单元格 310
14.3.8 区域的联合 311
14.3.9 区域的相交包含 312
14.4 Range对象的常用方法 313
14.4.1 单元格的选中和激活 313
14.4.2 复制剪切单元格 315
14.4.3 粘贴格式 315
14.4.4 插入和删除单元格 316
14.4.5 自动调整行高列宽 318
14.4.6 自动填充 318
14.4.7 单元格排序 320
14.4.8 查找和替换 321
14.4.9 文本分列 323
14.4.10 自动朗读单元格内容 324
14.5 Range成员对象 325
14.5.1 设置单元格边框 325
14.5.2 设置单元格填充色 328
14.5.3 设置单元格字体 330
14.5.4 单元格的对齐方式 331
14.5.5 处理单元格中的字符 333
14.5.6 处理单元格中的批注 335
14.5.7 处理条件格式 339
14.5.8 处理数据有效性 344
14.5.9 使用单元格样式 348
14.6 Range对象专题讲解 352
14.6.1 单元格的合并与取消合并 352
14.6.2 Range与名称的使用 354
14.6.3 如何遍历单元格 357
14.6.4 单元格与数组之间的数据传递 359
14.6.5 单元格的带格式查找 361
14.6.6 公式审核 362
习题 365
第15章 其他常用ExcelVBA对象 367
15.1 处理工作表中的图片 367
15.1.1 插入外部图片 367
15.1.2 插入形状 369
15.1.3 Shape对象的引用和遍历 370
15.1.4 Shape对象的属性获取与设定 371
15.1.5 Shape对象的常用方法 373
15.2 工作表使用表单控件 378
15.2.1 使用组合框 379
15.2.2 使用列表框 380
15.2.3 使用复选框 380
15.2.4 使用单选按钮 380
15.2.5 数值调节器 382
15.2.6 滚动条 382
15.2.7 用代码自动插入表单控件 383
15.2.8 批量删除表单控件 385
15.3 工作表使用ActiveX控件 386
15.3.1 控件的属性设定 387
15.3.2 控件的事件过程 387
15.3.3 自动插入ActiveX控件 388
15.3.4 工作表中播放动画 389
15.3.5 ActiveX控件的删除 390
15.4 处理工作表中的超链接 391
15.4.1 创建超链接 391
15.4.2 遍历工作表中的超链接 392
15.4.3 打开超链接 393
15.4.4 删除超链接 393
15.5 Excel内置对话框 394
15.5.1 调出内置对话框 394
15.5.2 为对话框设置默认参数 395
15.6 文件选择对话框 395
15.6.1 对话框的类型 395
15.6.2 对话框的属性 396
15.6.3 对话框的方法 396
15.6.4 文件选择 396
15.6.5 路径选择 398
15.6.6 打开文件 398
15.6.7 另存文件 400
15.7 操作自定义序列 401
15.7.1 增加用户自定义序列 402
15.7.2 获取序列的编号 403
15.7.3 导出全部序列到单元格 403
15.7.4 删除自定义序列 404
习题 404
第16章 用户窗体和控件设计 407
16.1 窗体设计基础 407
16.1.1 设计的第一个窗体 408
16.1.2 使用和维护控件工具箱 411
16.1.3 基本控件 412
16.1.4 使用属性窗口 412
16.2 窗体与控件的通用属性 413
16.2.1 名称 413
16.2.2 标题 413
16.2.3 文本 414
16.2.4 值 414
16.2.5 位置大小属性 414
16.2.6 背景色 415
16.2.7 前景色 415
16.2.8 字体 415
16.2.9 Tab序号 416
16.2.10 可用性 417
16.2.11 可见性 417
16.3 窗体与控件的通用方法 418
16.3.1 自动获得焦点 418
16.3.2 移动控件 418
16.3.3 改变叠放次序 419
16.4 窗体与控件的事件 420
16.5 窗体使用技巧 421
16.5.1 窗体的模式 421
16.5.2 设置窗体的字体 421
16.5.3 设置窗体背景图片 421
16.5.4 窗体铺满整个屏幕 423
16.5.5 窗体的启动和关闭事件 423
16.6 命令按钮使用技巧 424
16.6.1 自动调整按钮大小 424
16.6.2 默认按钮和退出按钮 424
16.6.3 设置控件的提示语 425
16.6.4 为按钮设置加速键 425
16.6.5 设置鼠标指针 425
16.7 标签 426
16.7.1 设置标签的边框 426
16.7.2 标签的自适应 426
16.7.3 文本自动换行 426
16.8 文本框 426
16.8.1 锁定文本框 427
16.8.2 制作密码输入框 427
16.8.3 限制输入长度 427
16.8.4 多行模式 427
16.8.5 文本框的滚动条 427
16.8.6 自动重置和验证文本 428
16.8.7 内容改变事件 429
16.8.8 使用文本框的选定状态 429
16.8.9 文本框内容的复制、粘贴 430
16.9 响应键盘按键的事件 431
16.9.1 按下快捷键关闭窗体 431
16.9.2 松开快捷键让文本框内容倒序 432
16.9.3 识别和修改输入的字符 433
16.10 组合框 433
16.10.1 增加条目 434
16.10.2 删除条目 435
16.10.3 获取组合框条目信息 435
16.11 列表框 436
16.11.1 列表框的单击事件 437
16.11.2 带复选框的多选列表框 438
16.12 复选框 439
16.13 单选按钮 440
16.13.1 使用框架隔离单选按钮 440
16.13.2 设置GroupName隔离单选按钮 441
16.14 切换按钮 442
16.15 框架 442
16.16 多标签控件 443
16.16.1 用代码增加标签 445
16.16.2 用代码删除标签 446
16.17 多页控件 446
16.18 滚动条 448
16.19 旋转按钮 449
16.20 图像控件 450
16.21 RefEdit控件 451
16.22 遍历窗体上的控件 452
16.22.1 运行期间动态增加控件 453
16.22.2 运行期间动态删除控件 454
16.23 响应鼠标单击的事件 455
16.23.1 判断鼠标按键 455
16.23.2 判断键盘辅助键 456
16.23.3 判断单击位置 456
16.23.4 移动鼠标的事件 458
16.24 使用附加控件 458
习题 460
第17章 自定义工具栏 462
17.1 工具栏基础知识 462
17.1.1 使用自定义对话框 465
17.1.2 手工方式进行工具栏设计 465
17.1.3 自定义工具栏的存储位置 470
17.2 工具栏的VBA模型 471
17.3 CommandBar对象 471
17.3.1 CommandBar重要属性 472
17.3.2 CommandBar重要方法 474
17.4 CommandBarControl对象 477
17.4.1 遍历工具栏中所有控件信息 478
17.4.2 控件的属性 480
17.4.3 控件的方法 487
17.4.4 控件的事件 491
17.5 创建自定义工具栏 493
17.5.1 创建菜单栏 493
17.5.2 创建级联菜单 496
17.5.3 创建一般工具栏 498
17.5.4 调整工具栏的位置和大小 500
17.5.5 创建右键菜单 502
17.6 自定义工具栏高级技术 505
17.6.1 使用组合框控件 505
17.6.2 使用文本框控件 507
17.6.3 设计用户窗体的菜单 509
17.6.4 遍历所有FaceID 510
17.6.5 提取Windows系统字体名称和字号列表 511
17.7 Excel高版本的工具栏设计 512
17.7.1 增加菜单命令 512
17.7.2 增加工具栏命令 513
17.7.3 创建自定义工具栏 513
17.7.4 显示Excel 2003经典菜单 515
习题 515
第18章 Excel加载宏 517
18.1 Excel加载宏对话框 517
18.2 加载宏可以包含的内容 518
18.2.1 过程和快捷键 519
18.2.2 自定义函数 521
18.2.3 用户窗体 521
18.2.4 工具栏和控件 522
18.2.5 自定义功能区 524
18.2.6 事件过程 524
18.3 修改加载宏文件 525
18.4 使用VBA操作加载宏 526
18.4.1 加载宏的重要属性 527
18.4.2 加载宏的遍历 528
18.4.3 VBA代码中调用加载宏中的过程和函数 528
18.4.4 完全删除加载宏 530
习题 531
第19章 经典编程实例 533
19.1 角谷猜想 533
19.2 单元格文字连接 534
19.3 学生成绩评定和登记 535
19.4 汇总历年奖牌榜 536
19.5 早退员工高亮显示 538
19.6 一次函数用于单元格的遍历 539
19.7 单词表按首字母汇总 542
19.8 交叉表汇总——双边贸易关系 543
附录A VBA编程常用资料 545
A.1 Excel VBA实用语句 545
A.1.1 Application对象实用语句 545
A.1.2 Workbook对象实用语句 545
A.1.3 Worksheet对象实用语句 546
A.1.4 Window对象实用语句 546
A.1.5 Range对象实用语句 546
A.2 VBA函数用法示例 547
A.3 VBA编程疑难问答 550