第1章 Excel VBA,没你想的那么难 2
1.1 Excel中那些重复又重复的操作 2
1.1.1 你这样用Excel,我要吐槽 2
1.1.2 重复操作,Excel中随处可见 4
1.1.3 重复的操作,就像重复的声音 5
1.1.4 Excel中也有类似的“录音设备” 6
1.2 Excel中的重复操作可以被录制下来 6
1.2.1 Excel中的“录音设备” 6
1.2.2 用宏录制器录制下在Excel中的操作 7
1.2.3 让录制下的操作再现一遍 10
1.3 录制下的操作,还能这样重现它 11
1.3.1 追求执行速度,就用快捷键 12
1.3.2 希望直观形象,可以用按钮 13
1.4 录制好的宏,为什么不能执行了 16
1.4.1 宏不能执行,是出于安全考虑 16
1.4.2 修改宏安全性,让Excel允许执行所有宏 17
1.5 Excel用什么记录录下的操作 17
1.5.1 宏就是一串串可以控制和操作Excel的代码 17
1.5.2 学习VBA,就是学习编写能控制和操作Excel的代码 18
1.6 VBA,就是我们和Excel沟通的语言 19
1.6.1 要使用Excel,需要知道怎样和它“沟通” 19
1.6.2 VBA,只是一种计算机编程语言的名字 19
1.7 Excel已能录制代码,何需再动手编写 20
1.7.1 录制的宏,不能解决所有问题 20
1.7.2 只需简单修改,便能让宏的威力大增 21
1.7.3 自主编写代码,让宏的功能更加灵活 22
第2章 认识编程工具,开始学习 VBA的第一步 25
2.1 应该在哪里编写VBA程序 25
2.2 了解VBA的编程工具——VBE 26
2.2.1 可以用哪些方法打开VBE窗口 26
2.2.2 VBE窗口中都有什么 28
2.3 怎样在VBE中编写VBA程序 33
2.3.1 VBA程序就是完成一个任务所需的一组VBA代码 33
2.3.2 看看VBA程序都长什么样 33
2.3.3 动手编写一个VBA程序 35
第3章 学习语法,了解VBA编程应遵循的规则 40
3.1 语法,就是语言表达时应遵循的规则 40
3.1.1 不懂语法,表达就会出错 40
3.1.2 作为一门编程语言,VBA也有语法 40
3.1.3 别担心,VBA语法并不复杂 40
3.2 VBA中的数据及数据类型 41
3.2.1 在Excel中,数据就是保存在单元格中的信息 41
3.2.2 数据类型,就是对同一类数据的统称 41
3.2.3 VBA将数据分为哪些类型 43
3.2.4 为什么要对数据进行分类 44
3.3 VBA中存储数据的容器:变量和常量 45
3.3.1 程序中的数据保存在哪里 45
3.3.2 变量,就是给数据预留的内存空间 45
3.3.3 常量,通常用于存储某些固定的数据 46
3.4 在程序中使用变量存储数据 46
3.4.1 声明变量,就是指定变量的名称及可存储的数据类型 46
3.4.2 还能用这些语句声明变量 46
3.4.3 给变量赋值,就是把数据存储到变量中 47
3.4.4 让变量中存储的数据参与程序计算 48
3.4.5 关于声明变量,还应掌握这些知识 50
3.4.6 不同的变量,作用域也可能不相同 56
3.4.7 定义不同作用域的变量 57
3.5 特殊的变量——数组 59
3.5.1 数组,就是同种类型的多个变量的集合 59
3.5.2 怎么表示数组中的某个元素 60
3.5.3 声明数组时应声明数组的大小 62
3.5.4 给数组赋值就是给数组的每个元素分别赋值 63
3.5.5 数组的维数 63
3.5.6 声明多维数组 68
3.5.7 声明动态数组 70
3.5.8 这种创建数组的方法更简单 72
3.5.9 关于数组,这些运算应该掌握 75
3.5.10 将数组中保存的数据写入单元格区域 79
3.6 特殊数据的专用容器——常量 80
3.6.1 常量就像一次性的纸杯 80
3.6.2 声明常量时应同时给常量赋值 81
3.6.3 常量也有不同的作用域 81
3.7 对象、集合及对象的属性和方法 81
3.7.1 对象就是用代码操作和控制的东西 81
3.7.2 对象的层次结构 81
3.7.3 集合就是多个同种类型的对象 83
3.7.4 怎样表示集合中的某个对象 84
3.7.5 属性就是对象包含的内容或具有的特征 85
3.7.6 对象和属性是相对而言的 85
3.7.7 方法就是在对象上执行的某个动作或操作 86
3.8 连接数据的桥梁,VBA中的运算符 87
3.8.1 算术运算符 88
3.8.2 比较运算符 88
3.8.3 文本运算符 90
3.8.4 逻辑运算符 91
3.8.5 多种运算中应该先计算谁 92
3.9 VBA中的内置函数 93
3.9.1 函数就是预先定义好的计算 93
3.9.2 VBA中有哪些函数 94
3.10 控制程序执行的基本语句结构 95
3.10.1 生活中无处不在的选择 95
3.10.2 用If语句解决VBA中的选择问题 96
3.10.3 使用Select Case语句解决“多选一”的问题 100
3.10.4 用For...Next语句循环执行同一段代码 103
3.10.5 用For Each...Next语句循环处理集合或数组中的成员 111
3.10.6 用Do语句按条件控制循环 113
3.10.7 使用GoTo语句,让程序转到另一条语句去执行 117
3.10.8 With语句,简写代码离不开它 117
3.11 Sub过程,基本的程序单元 119
3.11.1 VBA过程就是完成一个任务所需代码的组合 119
3.11.2 Sub过程的基本结构 119
3.11.3 应该把Sub过程写在哪里 120
3.11.4 Sub过程的基本结构 121
3.11.5 过程的作用域 121
3.11.6 在过程中执行另一个过程 123
3.11.7 向过程传递参数 125
3.12 自定义函数,Function过程 127
3.12.1 Function过程就是用VBA自定义的函数 127
3.12.2 试写一个自定义函数 128
3.12.3 使用自定义函数完成设定的计算 129
3.12.4 用自定义函数统计指定颜色的单元格个数 131
3.12.5 声明Furction过程的语句结构 135
3.13 排版和注释,让编写的代码阅读性更强 135
3.13.1 代码排版,必不可少的习惯 136
3.13.2 为特殊语句添加注释,让代码的意图清晰明了 138
第4章 操作对象,解决工作中的实际问题 142
4.1 与Excel交流,需要熟悉的常用对象 142
4.1.1 用VBA编程就像在厨房里烧菜 142
4.1.2 VBA通过操作不同的对象来控制Excel 143
4.1.3 使用VBA编程,应该记住哪些对象 143
4.2 一切从我开始,最顶层的Application对象 144
4.2.1 用ScreenUpdating属性设置是否更新屏幕上的内容 145
4.2.2 设置DisplayAlerts属性禁止显示警告对话框 148
4.2.3 借助WorksheetFunction属性使用工作表函数 150
4.2.4 设置属性,更改Excel的工作界面 152
4.2.5 Application对象的子对象 153
4.3 管理工作簿,了解Workbook对象 154
4.3.1 Workbook对象是Workbooks集合中的一个成员 154
4.3.2 访问对象的属性,获得工作簿文件的信息 157
4.3.3 用Add方法创建工作簿 158
4.3.4 用Open方法打开工作簿 159
4.3.5 用Activate方法激活工作簿 159
4.3.6 保存工作簿文件 160
4.3.7 用Close方法关闭工作簿 160
4.3.8 ThisWorkbook与ActiveWorkbook 161
4.4 操作工作表,认识Worksheet对象 162
4.4.1 引用工作表的3种方法 162
4.4.2 用Add方法新建工作表 163
4.4.3 设置Name属性,更改工作表的标签名称 164
4.4.4 用Delete方法删除工作表 165
4.4.5 激活工作表的两种方法 165
4.4.6 用Copy方法复制工作表 166
4.4.7 用Move方法移动工作表 167
4.4.8 设置Visible属性,隐藏或显示工作表 167
4.4.9 访问Count属性,获得工作簿中的工作表数量 169
4.4.10 容易混淆的Sheets与Worksheets对象 169
4.5 操作的核心,至关重要的Range对象 171
4.5.1 用Range属性引用单元格 171
4.5.2 用Cells属性引用单元格 173
4.5.3 引用单元格,更简短的快捷方式 176
4.5.4 引用整行单元格 177
4.5.5 引用整列单元格 178
4.5.6 用Union方法合并多个单元格区域 178
4.5.7 Range对象的Offset属性 180
4.5.8 Range对象的Resize属性 181
4.5.9 Wo rksheet对象的UsedRange属性 182
4.5.10 Range对象的CurrentRegion属性 183
4.5.11 Range对象的End属性 183
4.5.12 单元格中的内容:Value属性 186
4.5.13 访问Count属性,获得区域中包含的单元格个数 186
4.5.14 通过Add ress属性获得单元格的地址 186
4.5.15 用Activate与Select方法选中单元格 187
4.5.16 选择清除单元格中的信息 187
4.5.17 用Copy方法复制单元格区域 188
4.5.18 用Cut方法剪切单元格 190
4.5.19 用Delete方法删除指定的单元格 191
4.6 结合例子,学习怎样操作对象 192
4.6.1 根据需求创建工作簿 192
4.6.2 判断某个工作簿是否已经打开 193
4.6.3 判断文件夹中是否存在指定名称的工作簿文件 193
4.6.4 向未打开的工作簿中输入数据 194
4.6.5 隐藏活动工作表外的所有工作表 194
4.6.6 批量新建指定名称的工作表 195
4.6.7 批量对数据分类,并保存到不同的工作表中 197
4.6.8 将多张工作表中的数据合并到一张工作表中 198
4.6.9 将工作簿中的每张工作表都保存为单独的工作簿文件 198
4.6.10 将多个工作簿中的数据合并到同一张工作表中 200
4.6.11 为同一工作簿中的工作表建一个带链接的目录 201
第5章 执行程序的自动开关——对象的事件 204
5.1 用事件替程序安装一个自动执行的开关 204
5.1.1 事件就是能被对象识别的某个操作 204
5.1.2 事件是怎样执行程序的 204
5.1.3 让Excel自动响应我们的操作 205
5.1.4 能自动运行的Sub过程——事件过程 207
5.1.5 利用事件,让Excel在单元格中写入当前系统时间 208
5.2 使用工作表事件 209
5.2.1 工作表事件就是发生在Worksheet对象中的事件 209
5.2.2 Worksheet对象的Change事件 210
5.2.3 禁用事件,让事件过程不再自动执行 213
5.2.4 一举多得,巧用Change事件快速录入数据 216
5.2.5 SelectionChange事件:当选中的单元格改变时发生 218
5.2.6 看看我该监考哪一场 219
5.2.7 用批注记录单元格中数据的修改情况 221
5.2.8 常用的Worksheet事件 223
5.3 使用工作簿事件 224
5.3.1 工作簿事件就是发生在Workbook对象中的事件 224
5.3.2 Open事件:当打开工作簿的时候发生 225
5.3.3 BeforeClose事件:在关闭工作簿之前发生 225
5.3.4 SheetChange事件:更改任意工作表中的单元格时发生 226
5.3.5 常用的Workbook事件 228
5.4 不是事件的事件 229
5.4.1 Application对象的OnKey方法 229
5.4.2 Application对象的OnTime方法 232
5.4.3 让文件每隔5分钟自动保存一次 234
第6章 设计自定义的操作界面 238
6.1 需要用什么来设计操作界面 238
6.1.1 为什么要替程序设计操作界面 238
6.1.2 控件,搭建操作界面必不可少的零件 239
6.1.3 在工作表中使用表单控件 240
6.1.4 在工作表中使用ActiveX控件 242
6.1.5 表单控件和ActiveX控件的区别 246
6.2 不需设置,使用现成的对话框 246
6.2.1 用InputBox函数创建一个可输入数据的对话框 246
6.2.2 用InputBox方法创建交互对话框 248
6.2.3 用MsgBox函数创建输出对话框 250
6.2.4 用FindFile方法显示【打开】对话框 255
6.2.5 用GetOpenFilename方法显示【打开】对话框 256
6.2.6 用GetSaveAsFilename方法显示【另存为】对话框 263
6.2.7 用Application对象的FileDialog属性获取目录名称 264
6.3 使用窗体对象设计交互界面 265
6.3.1 设计界面,需要用到Use rForm对象 265
6.3.2 在工程中添加一个用户窗体 266
6.3.3 设置属性,改变窗体的外观 267
6.3.4 在窗体上添加和设置控件的功能 268
6.4 用代码操作自己设计的窗体 270
6.4.1 显示用户窗体 270
6.4.2 设置窗体的显示位置 272
6.4.3 将窗体显示为无模式窗体 273
6.4.4 关闭或隐藏已显示的窗体 274
6.5 用户窗体的事件应用 276
6.5.1 借助Initialize事件初始化窗体 276
6.5.2 借助QueryClose事件让窗体自带的【关闭】按钮失效 278
6.5.3 窗体对象的其他事件 280
6.6 编写代码,为窗体中的控件设置功能 280
6.6.1 为【确定】按钮添加事件过程 281
6.6.2 使用窗体录入数据 282
6.6.3 给【退出】按钮添加事件过程 282
6.6.4 给控件设置快捷键 282
6.6.5 更改控件的Tab键顺序 283
6.7 用窗体制作一个简易的登录窗体 284
6.7.1 设计登录窗体的界面 285