第1章 VBA编程概述 1
1.1 VBA简介 1
1.1.1 VBA发展历程简述 1
1.1.2 VBA的应用场合 2
1.1.3 VBA的特点 2
1.2 Excel文件格式 3
1.3 宏的安全性设置 3
1.3.1 临时允许或禁止运行宏 3
1.3.2 允许运行特定文件夹中的宏 4
1.3.3 允许运行所有宏 6
1.3.4 禁止他人随意修改宏 7
1.4 录制与使用宏 7
1.4.1 显示“开发工具”选项卡 7
1.4.2 录制宏 8
1.4.3 保存宏 10
1.4.4 运行宏的多种方式 10
1.4.5 绝对录制和相对录制 13
1.4.6 修改宏 14
1.5 使用VBE窗口 14
1.5.1 打开VBE窗口 15
1.5.2 工程资源管理器 15
1.5.3 属性窗口 16
1.5.4 代码窗口 16
1.5.5 管理代码模块 17
1.6 Excel应用程序开发流程 17
1.6.1 优秀Excel应用程序的标准 17
1.6.2 确定用户类型 18
1.6.3 确定用户需求 18
1.6.4 设计用户界面 19
1.6.5 编写代码 20
1.6.6 测试应用程序 20
1.6.7 修复错误 20
1.6.8 发布应用程序 21
第2章 掌握VBA编程语言 22
2.1 与VBA进行简单的交互 22
2.1.1 使用MsgBox函数输出信息 22
2.1.2 使用InputBox函数输入信息 25
2.2 数据类型、变量和常量 26
2.2.1 VBA中的数据类型 26
2.2.2 声明变量 27
2.2.3 变量的命名规则 29
2.2.4 变量的作用域和生存期 30
2.2.5 使用常量 32
2.3 表达式和运算符 32
2.4 创建Sub过程 34
2.4.1 声明Sub过程 34
2.4.2 Sub过程的作用域 35
2.4.3 在VBA中调用Sub过程 36
2.4.4 向Sub过程传递参数 38
2.4.5 Sub过程的递归 40
2.5 创建Function过程 41
2.5.1 Function过程与Sub过程的区别 41
2.5.2 声明Function过程 41
2.5.3 调用Function过程 43
2.5.4 使用VBA内置函数 43
2.6 控制程序的运行流程 44
2.6.1 If Then判断结构 44
2.6.2 Select Case判断结构 48
2.6.3 For Next循环结构 50
2.6.4 Do Loop循环结构 51
2.7 使用数组 53
2.7.1 数组的维数 53
2.7.2 声明一维数组 54
2.7.3 声明二维数组 55
2.7.4 为数组赋值 56
2.7.5 使用动态数组 57
2.8 错误处理 58
2.8.1 错误类型 58
2.8.2 调试代码 60
2.8.3 处理运行时错误 61
2.9 规范化编写代码 63
2.9.1 强制变量声明 63
2.9.2 使用缩进格式 63
2.9.3 将长代码分成多行 64
2.9.4 为代码添加注释 64
第3章 对象编程基础 66
3.1 理解类、对象与集合 66
3.1.1 Excel对象模型 66
3.1.2 类与对象 66
3.1.3 使用对象浏览器查看类和对象的相关信息 67
3.1.4 引用集合中的对象 67
3.1.5 父对象与子对象及其定位方法 68
3.2 对象的属性 68
3.2.1 引用对象的属性 69
3.2.2 设置属性的值 69
3.2.3 可返回对象的属性 70
3.3 对象的方法 70
3.3.1 方法的参数 70
3.3.2 使用命名参数 71
3.3.3 可返回对象的方法 72
3.4 对象编程技巧 72
3.4.1 使用对象变量 72
3.4.2 使用With结构 73
3.4.3 使用For Each结构 74
第4章 使用Application对象处理Excel程序 76
4.1 理解Application对象和全局属性 76
4.2 获取Excel程序的相关信息 78
4.2.1 获取Excel程序的版本号 78
4.2.2 获取在Excel程序中设置的用户名 78
4.2.3 获取Excel安装路径、启动文件夹路径和工作簿模板路径 79
4.3 设置Excel程序的界面环境与操作方式 79
4.3.1 设置Excel程序的可见性 79
4.3.2 设置Excel程序窗口是否全屏显示 80
4.3.3 设置Excel程序窗口的状态 80
4.3.4 设置Excel程序窗口的尺寸和位置 81
4.3.5 设置Excel程序窗口标题栏中显示的名称 82
4.3.6 设置编辑栏、浮动工具栏和“开发工具”选项卡的显示状态 82
4.3.7 设置状态栏中显示的信息 84
4.3.8 设置警告信息的显示方式 85
4.3.9 设置新工作簿中默认包含的工作表数量 85
4.3.10 设置工作簿的默认字体和字号 86
4.3.11 设置打开文件时的默认路径 86
4.3.12 控制屏幕刷新 87
4.4 使用Excel程序 88
4.4.1 定时自动运行VBA过程 88
4.4.2 为VBA过程指定快捷键 90
4.4.3 向其他程序发送按键信息 91
4.4.4 计算字符串表达式 91
4.4.5 在VBA中使用Excel工作表函数 92
第5章 使用Workbook对象处理工作簿 94
5.1 理解Workbooks集合与Workbook对象 94
5.1.1 Workbooks集合的常用属性和方法 94
5.1.2 Workbook对象的常用属性和方法 94
5.1.3 引用工作簿 95
5.2 新建工作簿 95
5.2.1 新建一个工作簿 96
5.2.2 新建多个工作簿 96
5.3 打开工作簿 97
5.3.1 打开一个工作簿 97
5.3.2 打开多个工作簿 98
5.3.3 获取工作簿的路径和名称 98
5.4 保存工作簿 99
5.4.1 保存和另存工作簿 99
5.4.2 覆盖现有工作簿 100
5.5 关闭工作簿 100
5.5.1 关闭一个工作簿 100
5.5.2 关闭多个工作簿 101
5.5.3 关闭多余的工作簿窗口 102
5.6 保护工作簿 103
5.6.1 为工作簿设置打开密码 103
5.6.2 清除工作簿中的密码 103
第6章 使用Worksheet对象处理工作表 105
6.1 理解Worksheets集合与Worksheet对象 105
6.1.1 Worksheets集合的常用属性和方法 105
6.1.2 Worksheet对象的常用属性和方法 105
6.1.3 Worksheets集合与Sheets集合 106
6.1.4 引用工作表 106
6.2 获取工作表的相关信息 107
6.2.1 获取工作表的类型 107
6.2.2 获取工作簿结构的保护状态 108
6.2.3 获取工作表的保护状态 109
6.3 新建工作表 109
6.4 选择与激活工作表 110
6.5 重命名工作表 111
6.6 移动和复制工作表 112
6.6.1 移动工作表 112
6.6.2 复制工作表 113
6.7 隐藏工作表 113
6.8 删除工作表 114
6.9 将工作簿中的所有工作表导出为独立的工作簿 115
第7章 使用Range对象处理单元格区域 117
7.1 理解Range对象 117
7.1.1 Range对象的常用属性和方法 117
7.1.2 选择与激活单元格 118
7.2 引用单元格和单元格区域 119
7.2.1 引用一个单元格 119
7.2.2 引用连续或不连续的单元格区域 121
7.2.3 处理多个单元格区域 122
7.2.4 引用多个区域的重叠部分 122
7.2.5 引用一行或多行 123
7.2.6 引用一列或多列 124
7.2.7 [A1]引用方式 124
7.2.8 引用当前包含数据的独立区域 124
7.2.9 引用工作表中的已用区域 125
7.2.10 通过偏移引用单元格或单元格区域 127
7.2.11 调整单元格区域的引用范围 128
7.3 在单元格区域中定位与查找 128
7.3.1 定位单元格区域的边界 129
7.3.2 定位包含指定类型内容的单元格 130
7.3.3 查找包含特定信息的单元格 132
7.4 读取和写入单元格区域中的数据 134
7.4.1 通过循环遍历每个单元格读写数据 134
7.4.2 使用数组与单元格区域交换数据 135
7.4.3 使用选择性粘贴 137
7.5 创建与使用名称 139
7.5.1 Excel中的预定义名称 139
7.5.2 命名单元格区域 139
7.5.3 Name对象和Name属性 140
7.5.4 使用名称 141
7.5.5 在名称中存储值 141
7.5.6 在名称中存储公式 142
7.5.7 在名称中存储数组 142
7.5.8 隐藏名称 143
7.5.9 删除名称 143
7.6 排序和筛选数据 143
7.6.1 排序数据 143
7.6.2 自动筛选 146
7.6.3 高级筛选 149
第8章 使用Shape对象处理图形对象 151
8.1 理解Shapes集合与Shape对象 151
8.1.1 Shapes集合的常用属性和方法 151
8.1.2 Shape对象的常用属性和方法 152
8.1.3 Shapes集合与ShapeRange集合 152
8.1.4 引用图形对象 153
8.2 获取图形对象的相关信息 153
8.2.1 获取图形对象的名称 154
8.2.2 获取图形对象的类型 155
8.2.3 获取图形对象的位置 156
8.3 插入与删除图形对象 157
8.3.1 插入自选图形 157
8.3.2 插入图片 159
8.3.3 选择特定类型的图形对象 162
8.3.4 删除工作表中的所有图形对象 163
8.3.5 删除特定类型的图形对象 163
8.4 设置图形对象的格式 164
8.4.1 设置图形对象的填充格式 164
8.4.2 设置图形对象的边框格式 166
第9章 使用Chart和ChartObject对象处理图表 167
9.1 图表基础 167
9.1.1 嵌入式图表和图表工作表 167
9.1.2 图表的组成结构 168
9.1.3 图表的Excel对象模型 169
9.1.4 在VBA中引用图表 169
9.1.5 Chart对象的常用属性和方法 170
9.2 创建图表 171
9.2.1 创建嵌入式图表 171
9.2.2 创建图表工作表 176
9.2.3 在嵌入式图表和图表工作表之间转换 177
9.2.4 将所有嵌入式图表转换为图表工作表 179
9.3 设置与管理图表 179
9.3.1 更改图表类型 180
9.3.2 选择预置的图表布局 180
9.3.3 自定义设置图表布局 181
9.3.4 选择预置的图表样式 183
9.3.5 自定义设置图表格式 183
9.3.6 编辑图表的数据系列 185
9.3.7 将指定内容设置为图表的数据标签 188
9.3.8 设置所有嵌入式图表的大小 189
9.3.9 删除图表 190
9.4 将图表转换为图片 190
9.4.1 将单个嵌入式图表转换为图片 191
9.4.2 将工作簿中的所有嵌入式图表转换为图片 191
第10章 使用 PivotTable对象处理数据透视表 193
10.1 数据透视表基础 193
10.1.1 数据透视表的组成结构 193
10.1.2 数据透视表的常用术语 195
10.1.3 数据透视表缓存 196
10.1.4 数据透视表的Excel对象模型 197
10.2 创建与设置数据透视表 200
10.2.1 创建基本的数据透视表 200
10.2.2 将字段添加到数据透视表中 202
10.2.3 调整和删除字段 203
10.2.4 修改字段的名称 204
10.2.5 设置数据透视表的布局形式 204
10.2.6 隐藏行总计和列总计 205
10.2.7 设置数据的数字格式 206
10.2.8 设置数据的汇总方式 207
10.2.9 设置数据的显示方式 207
10.2.10 刷新数据透视表 208
第11章 使用类模块创建新的对象 209
11.1 类和类模块简介 209
11.2 创建类 210
11.2.1 创建基本的类 210
11.2.2 创建类的属性 210
11.2.3 创建类的方法 213
第12章 使用事件编写自动交互的程序 215
12.1 事件编程基础 215
12.1.1 Excel中的事件类型 215
12.1.2 事件代码的存储位置与输入方法 215
12.1.3 包含参数的事件 217
12.1.4 事件触发的先后顺序 218
12.1.5 开启与关闭事件 218
12.2 使用工作簿事件 219
12.2.1 工作簿包含的事件 219
12.2.2 Open事件 220
12.2.3 Activate事件 220
12.2.4 Deactivate事件 221
12.2.5 BeforeClose事件 221
12.2.6 BeforeSave事件 222
12.2.7 BeforePrint事件 223
12.2.8 SheetActivate事件 223
12.2.9 SheetDeactivate事件 224
12.2.10 NewSheet事件 225
12.2.11 SheetChange事件 225
12.2.12 SheetSelectionChange事件 226
12.2.13 SheetBeforeRightClick事件 226
12.2.14 SheetBeforeDoubleClick事件 227
12.3 使用工作表事件 227
12.3.1 工作表包含的事件 227
12.3.2 Activate事件 228
12.3.3 Deactivate事件 228
12.3.4 Change事件 228
12.3.5 SelectionChange事件 229
12.3.6 BeforeRightClick事件 229
12.3.7 BeforeDoubleClick事件 230
12.4 使用图表工作表事件 230
12.5 使用应用程序事件与嵌入式图表事件 231
12.5.1 捕获应用程序事件 231
12.5.2 捕获嵌入式图表事件 235
第13章 使用Excel对话框 237
13.1 使用InputBox方法 237
13.1.1 InputBox方法与InputBox函数的区别 237
13.1.2 使用InputBox方法输入指定类型的内容 237
13.2 使用Excel的打开和另存对话框 239
13.2.1 GetOpenFilename方法 239
13.2.2 GetSaveAsFilename方法 241
13.3 使用FileDialog对象显示和处理对话框 242
13.3.1 FileDialog对象的常用属性和方法 242
13.3.2 显示不同类型的对话框 243
13.3.3 指定在对话框中显示的文件类型 244
13.3.4 在对话框中选择一个或多个文件 245
13.3.5 对所选文件执行操作 246
13.4 使用Dialogs集合显示Excel内置对话框 246
第14章 创建用户窗体和控件 248
14.1 理解用户窗体和控件 248
14.1.1 用户窗体和控件简介 248
14.1.2 控件工具箱与控件类型 249
14.1.3 理解Controls集合 251
14.2 用户窗体的基本操作 252
14.2.1 创建用户窗体 252
14.2.2 设置用户窗体的属性 253
14.2.3 显示和关闭用户窗体 254
14.2.4 使用模式与无模式用户窗体 254
14.2.5 使用变量引用特定的用户窗体 255
14.2.6 创建特定用户窗体的多个实例 256
14.2.7 编写用户窗体的事件代码 257
14.2.8 禁用用户窗体中的关闭按钮 260
14.3 在用户窗体中使用控件 260
14.3.1 在用户窗体中添加控件 260
14.3.2 设置控件的属性 261
14.3.3 设置控件的大小 262
14.3.4 设置控件的位置和对齐方式 263
14.3.5 设置控件的Tab键顺序 263
14.3.6 引用用户窗体中的控件 264
14.3.7 编写控件的事件代码 265
14.3.8 使用同一个事件过程处理多个控件 265
14.4 常用控件的使用方法 267
14.4.1 命令按钮 267
14.4.2 文本框 269
14.4.3 数值调节钮 272
14.4.4 滚动条 273
14.4.5 选项按钮 274
14.4.6 复选框 276
14.4.7 列表框 277
14.4.8 组合框 291
14.4.9 图像 294
14.5 用户窗体和控件的综合应用 296
14.5.1 创建欢迎界面 296
14.5.2 创建登录窗口 298
14.5.3 创建颜色选择器 300
14.5.4 创建可改变大小的对话框 303
第15章 定制Excel界面环境 307
15.1 定制菜单栏 307
15.1.1 命令栏和控件的类型 307
15.1.2 创建命令栏和控件的通用方法 312
15.1.3 Excel中的所有菜单栏及其包含的控件 313
15.1.4 引用特定的菜单栏 314
15.1.5 引用菜单栏中的菜单 314
15.1.6 在内置菜单栏中添加菜单 317
15.1.7 在菜单中添加菜单项 318
15.1.8 使用Parameter属性传递参数值 321
15.1.9 禁用菜单或菜单项 324
15.1.10 隐藏菜单或菜单项 325
15.1.11 重置菜单 326
15.1.12 删除菜单或菜单项 327
15.1.13 创建新的菜单栏 328
15.2 定制工具栏 330
15.2.1 Excel中的所有工具栏及其包含的控件 330
15.2.2 工具栏控件的常用属性 331
15.2.3 引用特定的工具栏和控件 332
15.2.4 创建新的工具栏 333
15.2.5 在内置工具栏中添加控件 337
15.2.6 禁用工具栏中的控件 337
15.2.7 重置工具栏 337
15.2.8 删除工具栏中的控件和工具栏 338
15.3 定制快捷菜单 339
15.3.1 Excel中的所有快捷菜单及其包含的控件 339
15.3.2 在内置快捷菜单中添加子菜单和菜单项 341
15.3.3 禁用快捷菜单和菜单项 344
15.3.4 删除快捷菜单中的菜单项和快捷菜单 345
15.3.5 创建新的快捷菜单 346
15.4 功能区开发基础 348
15.4.1 Excel文件的内部结构 348
15.4.2 功能区的组成结构 349
15.4.3 定制功能区的一般流程和工具 350
15.4.4 功能区定制中的控件类型 351
15.4.5 控件属性 353
15.4.6 控件回调 354
15.4.7 使用VBA可以对功能区进行的操作 355
15.5 定制功能区 357
15.5.1 创建实现控件功能的VBA过程 357
15.5.2 编写定制功能区的RibbonX代码 358
15.5.3 将定制功能区的工作簿更改为压缩文件 361
15.5.4 在压缩文件中创建customUI文件夹 362
15.5.5 将customUI.xml文件移入customUI文件夹 362
15.5.6 建立RibbonX代码与工作簿之间的关联 362
15.5.7 测试定制后的功能区 363
15.5.8 定制功能区时可能遇到的问题 363
第16章 开发用户自定义函数 366
16.1 用户自定义函数基础 366
16.1.1 理解Function过程中的参数 366
16.1.2 创建不包含任何参数的函数 367
16.1.3 创建包含一个参数的函数 368
16.1.4 创建包含两个参数的函数 369
16.1.5 创建包含可选参数的函数 370
16.1.6 创建包含不定数量参数的函数 371
16.1.7 创建返回数组的函数 372
16.1.8 创建返回错误值的函数 374
16.1.9 为用户自定义函数添加帮助信息 375
16.2 开发用户自定义函数 377
16.2.1 从文本左侧提取连续的数字 378
16.2.2 将数字中的每一位输入到连续的多个单元格中 379
16.2.3 返回区域中第一个非空单元格的地址 380
16.2.4 返回区域中最后一个非空单元格的地址 380
16.2.5 返回包含特定内容的所有单元格的地址 381
16.2.6 统计区域中不重复值的数量 382
16.2.7 逆序排列单元格中的内容 383
16.2.8 按单元格背景色对单元格中的数据求和 383
16.2.9 执行多种类型的计算 384
16.2.10 返回所有工作表指定区域中的最大值 385
16.2.11 判断文件是否存在 385
16.2.12 判断工作簿是否已被打开 386
16.2.13 判断工作表是否存在 386
16.2.14 判断名称是否存在 387
16.2.15 从文件的完整路径中提取文件名 387
第17章 处理文件 388
17.1 VBA内置功能与FSO对象模型简介 388
17.1.1 处理文件和文件夹的VBA内置语句和函数 388
17.1.2 FSO对象模型简介 389
17.1.3 使用FSO对象模型前的准备工作 392
17.2 获取驱动器和文件信息 393
17.2.1 获取驱动器的相关信息 393
17.2.2 获取文件夹的相关信息 394
17.2.3 获取文件的相关信息 395
17.2.4 获取文件夹中的所有子文件夹的名称 395
17.2.5 获取文件夹中的所有文件的名称和类型 396
17.3 文件的基本操作 397
17.3.1 复制和移动文件 397
17.3.2 重命名文件 399
17.3.3 删除文件 400
17.3.4 创建文件夹 401
17.4 处理文本文件 401
17.4.1 打开和关闭文本文件 402
17.4.2 使用Write语句将数据写入文本文件 402
17.4.3 使用Print语句将数据写入文本文件 404
17.4.4 使用Input语句读取文本文件中的数据 406
17.4.5 使用Line Input语句读取文本文件中的数据 407
17.4.6 使用TextStream对象读写文本文件 408
第18章 与其他Office应用程序交互 411
18.1 与外部应用程序交互的基本概念与通用方法 411
18.1.1 在VBA中与外部应用程序交互的方式 411
18.1.2 外部可创建对象 411
18.1.3 理解前期绑定和后期绑定 412
18.1.4 使用前期绑定创建对象引用 413
18.1.5 使用后期绑定创建对象引用 414
18.1.6 引用一个已存在的应用程序实例 414
18.2 在Excel中操作Word 416
18.3 在Excel中启动其他应用程序 417
第19章 使用ADO访问数据 419
19.1 了解结构化查询语言 419
19.1.1 数据库的基本概念 419
19.1.2 结构化查询语言简介 420
19.1.3 使用SELECT语句检索数据 421
19.1.4 使用INSERT语句添加数据 424
19.1.5 使用UPDATE语句修改数据 425
19.1.6 使用DELETE语句删除数据 426
19.2 ADO对象模型简介 427
19.2.1 Connection对象 427
19.2.2 Command对象 427
19.2.3 Recordset对象 428
19.3 在Excel中使用ADO访问数据的一般流程和具体方法 428
19.3.1 添加对ADO类型库的引用 429
19.3.2 建立数据源的连接 429
19.3.3 从数据源中检索数据并返回特定的记录集 430
19.3.4 关闭数据源的连接 432
第20章 操作注册表 433
20.1 注册表基础 433
20.1.1 注册表简介 433
20.1.2 注册表的组织结构 433
20.1.3 创建与删除子键和键值 434
20.2 使用VBA操作注册表 436
20.2.1 使用SaveSetting语句将内容写入注册表 437
20.2.2 使用GetSetting函数读取特定键值中的内容 438
20.2.3 使用GetAllSettings函数读取特定子键中的所有内容 439
20.2.4 使用DeleteSetting语句删除注册表中的内容 440
第21章 操作VBE 442
21.1 编程控制VBE的准备工作 442
21.1.1 启用对VBE对象模型的访问权限 442
21.1.2 添加对VBIDE类型库的引用 443
21.2 理解VBE对象模型 444
21.2.1 VBE对象 444
21.2.2 VBProject对象 444
21.2.3 VBComponent对象 445
21.2.4 CodeModule对象 447
21.2.5 CodePane对象 449
21.2.6 Designer对象 449
21.2.7 Reference对象 449
21.3 使用VBA编程操作VBE 450
21.3.1 使用VBA自动添加和删除模块 450
21.3.2 使用VBA自动编写VBA代码 451
21.3.3 使用VBA自动创建用户窗体和控件并编写事件代码 452
第22章 创建和使用加载项 455
22.1 了解加载项 455
22.1.1 使用加载项的原因 455
22.1.2 加载项的特点与工作方式 455
22.1.3 加载项的存储位置和管理工具 456
22.2 创建加载项 457
22.2.1 为加载项添加标题和描述信息 458
22.2.2 保护加载项中的模块和VBA代码 459
22.2.3 创建加载项 460
22.3 管理加载项 460
22.3.1 安装与卸载加载项 460
22.3.2 打开与关闭加载项文件 461
22.3.3 修改并保存加载项 461
22.3.4 从“加载项”对话框中删除加载项 462
22.4 使用VBA操作加载项 462
22.4.1 理解AddIns集合与AddIn对象 463
22.4.2 列出Excel中的所有加载项 464
22.4.3 将加载项添加到Excel中 464
22.4.4 自动安装“加载项”对话框中的所有加载项 466
22.4.5 处理AddIn对象的事件 466
第23章 开发Excel实用程序 467
23.1 开发通用插件 467
23.1.1 通用插件与普通VBA程序的区别 467
23.1.2 通用插件开发案例 468
23.2 开发一个简单的人事管理系统 470
23.2.1 开发用户登录和身份验证模块 471
23.2.2 开发添加员工资料模块 473
23.2.3 开发修改员工资料模块 474
23.2.4 开发备份员工资料模块 475
23.2.5 开发删除员工资料模块 476
23.2.6 定制功能区界面 478
附录A VBA函数速查 479
附录B VBA语句速查 483
附录C VBA错误代码 486