描述
开 本: 16开纸 张: 胶版纸包 装: 平装-胶订是否套装: 否国际标准书号ISBN: 9787121320033
目前国内 VBA 图书讲插件开发思路的书极少,而市场对插件的需求却极大,开发插件有较广阔的前景。本书不仅用较大的篇幅讲述插件开发相关的知识,而且加入了执行插件命令后可以撤销的设计思路,这在 VBA 图书市场上*。
本书除 VBA 外,还提供 VSTO 知识,采用 VB.net 语法编写。
VSTO 比 VBA 更强大,能实现的功能也更多,同时还更安全。本书详细罗列了 VBA 与 VSTO在代码上的差异,然后演示修改 VBA 代码,使其符合 VB.net 语法规则的基本思路,从而让读者快速学会利用 VSTO 开发 Excel 插件。掌握本书第 16 章到第 19 章的知识,仅需半个月即可学会VSTO,不需要像学习 C#那样,耗费半年甚至一两年时间。
《Excel VBA与VSTO基础实战指南》属于学习Excel VBA的初中级教材,重点阐述了Excel VBA的基本理论、代码自动化以及开发Excel插件的思路。通读本书可以轻松应对制表工作中的疑难,同时还可以开发商业插件。
本书包括五部分内容,开头部分简述自动化操作的意义和成果展示;第二部分详细剖析VBA 的所有基础概念,包含代码的存放位置、写书方式、调用方式,认识对象、属性、方法与事件,以及理解变量、常量与数据类型并且掌握循环语句、条件语句、防错语句等知识;第三部分是VBA的高级应用,包含数组、窗体、字典、功能区设计、插件开发和撤销代码等知识;第四部分介绍通过VSTO开发Excel插件;第五部分提供365个VBA常见疑难解答。
本书每段代码都有思路分析,且对每句代码都提供了代码含义的详细注释,力求使讲解过程可
以更加精准,让代码更易理解,为读者提供更优秀的阅读体验。
第1章 自动化操作 1
1.1 自动化操作的价值 1
1.1.1 自动化操作的必要性 1
1.1.2 实现自动化操作的两个途径 3
1.2 利用宏简化日常工作 3
1.2.1 三分钟学会录制宏 4
1.2.2 执行宏的方法 7
1.2.3 两种方法读懂宏代码 7
1.2.4 宏的优缺点分析 10
1.2.5 如何发挥宏的长处 11
1.3 使用VBA强化Excel功能 12
1.3.1 追根溯源:什么是VBA 12
1.3.2 知己知彼:解析VBA的优缺点 13
1.3.3 窥斑见豹:从一个案例初识VBA 13
1.4 Excel VBA的发展前景 15
1.4.1 简化工作 15
1.4.2 开拓专业 16
1.5 课后思考 16
第2章 代码应用基础 17
2.1 区分VBE代码窗口 17
2.1.1 认识VBE窗口 17
2.1.2 最常用的代码存放区:标准模块 19
2.1.3 工作簿事件代码窗口:ThisWorkbook 23
2.1.4 工作表事件代码窗口:Sheet1 23
2.1.5 窗体代码窗口:UserForm1 24
2.1.6 创建隐藏对象的代码窗口:类模块 24
2.2 录入代码 25
2.2.1 代码的存放位置 25
2.2.2 写入代码的方式 25
2.2.3 提升代码的可读性 27
2.2.4 调用快速信息 31
2.3 四种代码执行方式 32
2.3.1 调用快捷键 32
2.3.2 单击按钮执行 33
2.3.3 自动执行 34
2.3.4 在公式中调用 35
2.4 保存代码 36
2.4.1 修改文件的保存格式 36
2.4.2 一劳永逸 37
2.5 让代码畅通无阻 37
2.5.1 调整宏的安全等级 38
2.5.2 添加受信任位置 38
2.5.3 将代码封装为加载项 39
2.6 反复调用相同代码 39
2.6.1 使用个人宏工作簿 39
2.6.2 加载宏 40
2.6.3 加载项 40
2.7 课后思考 40
第3章 从概念开始认识VBA 42
3.1 认识过程 42
3.1.1 过程的分类 42
3.1.2 Sub过程的基本语法 42
3.1.3 Sub过程的命名要求 44
3.1.4 Sub过程的调用方法与访问限制 45
3.1.5 过程的执行顺序 46
3.1.6 过程的递归 48
3.2 关于参数 49
3.2.1 参数的存在价值 49
3.2.2 过程名称中的参数 49
3.2.3 参数的赋值方式 50
3.2.4 可选参数与必选参数 52
3.2.5 代码中的参数 53
3.3 理解对象 54
3.3.1 什么是对象 54
3.3.2 对象的引用层次 55
3.4 对象的属性与方法 56
3.4.1 认识属性与方法 56
3.4.2 自动调用属性与方法 57
3.4.3 怎样才算完整的VBA语句 58
3.5 对象的事件 59
3.5.1 什么是事件 59
3.5.2 事件的存在价值 60
3.5.3 事件的分类与代码录入方式 60
3.5.4 事件的参数 62
3.6 课后思考 63
第4章 对象及其层次结构 65
4.1 查看所有对象 65
4.1.1 从对象浏览器查看对象 65
4.1.2 从帮助中调用对象的详细信息 65
4.2 对象的层次与引用方式 67
4.2.1 对象的层次 67
4.2.2 使用对象名称引用对象 67
4.2.3 使用复数形式表示对象集合 68
4.2.4 使用序号参数引用集合中的子对象 69
4.2.5 引用子对象 70
4.2.6 引用活动对象 70
4.2.7 引用父对象 71
4.2.8 利用WITH语句引用重复出现的对象 72
4.3 Range对象 74
4.3.1 Range(“A1”)引用方式 74
4.3.2 Cells(1,1)引用方式 76
4.3.3 [A1]引用方式 77
4.3.4 活动单元格:ActiveCell 78
4.3.5 屏幕坐标下的单元格:RangeFromPoint 79
4.3.6 选区:Selection、RangeSelection 80
4.3.7 已用区域:UsedRange 81
4.3.8 当前区域:CurrentRegion 83
4.3.9 按条件引用区域:SpecialCells 83
4.3.10 模拟End 方向键产生的单元格:End 86
4.3.11 按偏移量重置区域引用:Offset 88
4.3.12 按宽度与高度重置区域:Resize 90
4.3.13 引用多区域的合集:Union 91
4.3.14 引用多区域的交集:Intersect 92
4.4 图形对象 95
4.4.1 Shapes对象与子对象 95
4.4.2 图形对象的名称 95
4.4.3 DrawingObjects 96
4.4.4 图形对象的类别子集 97
4.5 表对象 98
4.5.1 表的合集与子对象 98
4.5.2 表对象的分类 98
4.5.3 活动表 99
4.5.4 隐藏工作表的特性 100
4.5.5 引用名字为数值的工作表的技巧 100
4.6 工作簿对象 101
4.6.1 工作簿合集与子对象 101
4.6.2 活动工作簿 101
4.6.3 关于后缀名 102
4.6.4 关于工作簿格式 103
4.7 Excel应用程序对象 103
4.7.1 Excel的顶层对象:Application 104
4.7.2 调用子对象时可以省略Application吗 104
4.7.3 不同版本的Excel之间的差异 104
4.8 课后思考 105
第5章 揭密数据类型与变量、常量 106
5.1 数据类型 106
5.1.1 区分数据类型的必要性 106
5.1.2 数据类型的分类 107
5.1.3 转换数据类型 110
5.2 定义变量 112
5.2.1 变量的用途 112
5.2.2 定义变量的方法 113
5.2.3 变量的命名规则 114
5.2.4 变量的作用域 115
5.2.5 变量的生命周期 117
5.2.6 静态变量与动态变量的分别 118
5.2.7 声明对象变量 119
5.2.8 对象变量的初始化与释放 121
5.3 定义常量 122
5.3.1 常量的用途 122
5.3.2 常量的定义方式 122
5.3.3 变量与常量的异同分析 123
5.4 课后思考 123
第6章 条件语句与循环语句 125
6.1 If语句解析 125
6.1.1 条件语句的重要性 125
6.1.2 If…Then…Else的单行模式 126
6.1.3 And、Or和Not在条件语句中的作用 127
6.1.4 案例解析:指定工作簿的最后开启日期 128
6.1.5 If…Then…Else的块形式 129
6.1.6 块形式的应用案例:创建日期批注 130
6.1.7 嵌套使用If语句 132
6.1.8 If语句的常见错误与防错之法 138
6.2 Select Case语句解析 140
6.2.1 Select Case语句的价值 140
6.2.2 Select Case基本语法 140
6.2.3 多条件应用案例 142
6.3 IIf函数 145
6.3.1 IIf函数语法解析 146
6.3.2 IIf函数案例应用:判断Excel的版本号 146
6.3.3 IIf函数的优缺点 147
6.4 For Next语句解析 147
6.4.1 循环语句的作用 147
6.4.2 For Next语句基本语法 148
6.4.3 步长值对循环结果的影响 149
6.4.4 For Next循环语句应用案例 149
6.5 For Each…Next语句解析 153
6.5.1 遍历对象集合 153
6.5.2 For Each…Next语句基本语法 153
6.5.3 For Each…Next语句应用案例:定位大于某值的单元格 154
6.6 Do Loop语句解析 156
6.6.1 Do Loop语法分析 156
6.6.2 Do Loop语法一应用 158
6.6.3 Do Loop语法二应用 161
6.6.4 Do Loop语法三应用 162
6.6.5 Do Loop语法四应用 163
6.6.6 总结三种循环语句的优缺点 166
6.7 课后思考 166
第7章 4类常见对象的应用案例 168
7.1 单元格对象 168
7.1.1 选择单元格 168
7.1.2 筛选与复制区域的值 169
7.1.3 多区域复制 171
7.1.4 选择性粘贴数据 172
7.1.5 重置已用数据区域 175
7.1.6 查找所有成绩为100的单元格 177
7.1.7 将表示平方米和立方米后面的2和3设为上标 178
7.1.8 合并相邻且相同的单元格 180
7.1.9 按行合并且保留所有数据 182
7.1.10 隔行插入行 183
7.1.11 标示选区中的重复值 184
7.2 图形对象 186
7.2.1 批量导入图片与图片名称 186
7.2.2 统一表中所有图片大小及对齐图片 189
7.2.3 插入图片到选区中 190
7.2.4 插入带图片背景的批注 192
7.3 工作表对象 194
7.3.1 显示所有隐藏的工作表 194
7.3.2 创建以本月每日日期命名的工作表 195
7.3.3 保护所有公式 196
7.3.4 批量重命名表 198
7.3.5 查找所有工作表中有循环引用的单元格 199
7.3.6 对职工表按学历排序 200
7.3.7 创建工作表目录 202
7.4 工作簿对象 204
7.4.1 打开带密码且带有自动宏的工作簿 204
7.4.2 另存工作簿且以今天的日期命名 204
7.4.3 将外部链接转换成值 205
7.4.4 关闭工作簿且不保存修改内容 206
7.4.5 定时保存且备份工作簿 207
7.4.6 重命名活动工作簿 208
7.5 课后思考 211
第8章 深入剖析VBA的各种事件 212
8.1 事件的级别与顺序 212
8.1.1 事件的级别与代码保存位置 212
8.1.2 事件的执行方式 214
8.1.3 事件的执行顺序 215
8.2 禁用与启用事件 215
8.2.1 临时关闭事件 215
8.2.2 防止事件的连锁反应 216
8.3 工作表事件详解 217
8.3.1 工作表事件列表 217
8.3.2 Change事件的特例 218
8.3.3 事件案例:激活工作表时验证访问权限 219
8.3.4 事件案例:自动标示当前行的背景 220
8.3.5 事件案例:双击单元格时选中所有相同值 222
8.3.6 事件案例:在特定区域右击单元格时产生工作表目录 223
8.3.7 事件案例:输入表达式时在右列自动返回计算结果 224
8.3.8 事件案例:单击目录时可打开隐藏的工作表 225
8.3.9 事件案例:实时保护已录入数据的单元格 226
8.3.10 事件案例:在状态栏显示当前科目的不及格人数 227
8.3.11 事件案例:通过数据有效性的下拉列表调用对应的图片 228
8.4 工作簿事件详解 229
8.4.1 工作簿事件列表 230
8.4.2 事件案例:记录工作簿打开次数 231
8.4.3 事件案例:显示活动工作表中的产量达标率 232
8.4.4 事件案例:打印数据前检查资料是否填写完整 234
8.4.5 事件案例:保存工作簿时更新工作表目录 235
8.4.6 事件案例:新建工作表时调用模板格式 236
8.4.7 事件案例:禁止修改总表名称 237
8.4.8 事件案例:新建图表时自动设置为阴影、圆角 238
8.5 应用程序级事件详解 239
8.5.1 应用程序与类 239
8.5.2 事件案例:打开任意工作簿时创建工作表目录 239
8.5.3 事件8
Microsoft Excel 是制表工具中最强大的软件,但是 Excel 内置的功能无法满足相对复杂的工作需求,而且不具备自动化操作的特性。在此前提下, VBA 应运而生, 它可以让复杂操作简单化,让烦琐工作自动化。
目前 Microsoft Office 已升级到 2016 版, Excel 自带的 VBA 版本为 7.1。本书以 Excel 2016为基础编写,但是由于 Excel 2010、 Excel 2013 和 Excel 2016 的 VBA 的差异微乎其微,小到可以忽略,因此读者也可以使用 Excel 2010、 Excel 2013 来学习本书的知识。
本书目的:本书重点有两个,其一是普及 Excel VBA 基础知识,其二是开发 Excel 插件。本书用了超过 50%的篇幅阐述 Excel VBA 的基本概念与语法规则,力图使读者在强化编程理论知识的基础上再学习插件开发等进阶应用。在基础章节中,重点展示了过程、参数、变量、常量、数据类型、对象、属性、方法和事件等概念,并通过第 7 章和第 8 章的数十个案例印证这些理论的价值,以及调用思路。
本书从第 13 章开始,重点讲述开发 Excel 插件的知识和步骤,并提供了诸多模板供读者调用。 Excel 插件从大体上分为两类,其一是开源的加载宏文件,其二是受保护的加载项。加载宏通常为 xla 或者 xlam 格式,直接在 VBA 的代码编译器中编写,本书不仅详细演示了开发加载宏的所有步骤和思路,还提供了让插件执行后可以撤销的方法,让用户在使用过程中不用担心覆盖重要数据,从而提升插件的品质。
加载项通常是 DLL 格式,使用 VB 或者 VB.net 开发, VB 开发的插件无法用于 64 位的 Office软件,因此本书为读者展示了 VB.net 中的 Office 插件开发工具 VSTO 的应用。
VSTO 属于 Visual Studio 平台中的工具,本书以 Visual Studio 2015 为例,详细分析了 VSTO
与 VBA 代码的语法差异,并通过三个最具代表性的插件设计步骤演示利用 VSTO 封装代码的过程,同时也为读者提供诸多模板,让大家在实际工作中利用这些模板快速地设计出自己的插件。
本书结构:《Excel VBA 与 VSTO 基础实战指南》大体分为五部分:
第一部分包含第 1 章,主要说明 VBA 的价值,从而提升读者对 VBA 的学习热情与兴趣。
第二部分最重要,详细剖析了 VBA 的基础理论,包含第 2 章到第 9 章。此部分内容重点展示了 Excel VBA 的所有基础理论,包含代码的存放位置、输入代码的方式、调用代码的方式、如何让代码运行时畅通无阻,理解什么是过程、对象、参数、事件、属性、方法、变量、常量和数据类型,并逐一讲解了工作中最有用的条件语句、循环语句和防错语句的语法,同时提供了数十个案例来加深读者对这些基础理论的理解。
第三部分包含第 10 章到第 15 章,分别介绍了通过数组优化代码,利用字典去除重复值,以及设计功能区中的菜单的思路,并提供了大量的模板。最后讲解开发通用插件,并让插件在执行过程中可以撤销,这是本书的一大特色内容。
第四部分属于 VSTO 的应用,也就是利用 VB.net 来封装 VBA 代码,将它打包成受保护的安装程序,从而提升插件代码的安全性和专业性。
第五部分包含第 20 章,本章为读者提供 365 个 VBA 思考题目,并在赠送的案例文件中提供了答案。
1.2.4 宏的优缺点分析
根据前面三个小节,已经对宏有了基本的认识,总体来说宏有以下特性。
1.优点
(1)宏代码严格来说不是程序,录制宏及调用宏也不算编程。但是录制宏能实现与编程相近的功能,让原本需要多个步骤的工作一键完成,而且宏代码可以反复调用。
(2)录制宏时可以按操作顺序如实记录所有操作信息,所以执行宏与录制宏时的操作效果是完全一致的。而在实际工作中,当步骤较多且需要重复操作时,手动操作较难确保每次的操作顺序一致,也难确保结果的保存位置、大小等参数一致,甚至遗漏某个操作步骤的可能性也同样存在。(3)宏是以代码的形式存在的,而代码可以调整顺序或者增删语句,所以当工作需求变化时,稍微调整宏代码即可完成所有工作,而不需要重新执行可能需要几十个步骤才能完成的工作。
(4)另外,
学习录制宏仅需三分钟,
在录制宏时只需要做基础操作,
不需要理会代码的含义、语法、思路,宏代码就会自动生成,这较之于其他不带录制功能的编程语言有更多的优越性。
2.缺点
微软公司在 Office 平台中推广宏仅短短几年,之后就用 VBA 替代了宏的地位,无疑是宏的局限性阻碍了它的发展,而 VBA 正好可以弥补宏的缺陷,它在灵活性、效率和全面性方面都远远超过宏。
首先,并非所有操作都能通过录制宏产生相应的代码,这意味着宏的全面性不足。
其次,录制宏多数时候会产生一些冗余代码,从而降低宏的执行效率。例如前面两次录制宏时,“设置单元格的字号为 20”这一个步骤产生的代码包括设置字号、字体、删除线、阴影、主题颜色等,如以下代码所示:
With Selection.Font
.Name = “宋体”
.Size = 20
.Strikethrough = False
.Superscript = False
.Subscript = False
.OutlineFont = False
.Shadow = False
.Underline = xlUnderlineStyleSingle
.ThemeColor = xlThemeColorLight1
.TintAndShade = 0
.ThemeFont = xlThemeFontMinor
End With
如果采用 VBA 编程,那么只需要“Selection.Font.Size = 20”一句代码即可满足工作需求,所以宏与
VBA 的效率差异较大。
再次,录制宏时只能记录操作,宏代码不会执行判断。例如可以录制“删除 A 列”的操作,但是无法通过录制宏实现“假设 A 列空白则整列删除”这类需求。而且,即使是能录制的操作也仅针对单一的操作,无法录制可循环的操作。例如删除工作表 200 列数据中所有奇数列的值,如果采用录制宏产生代码,那么在录制时需要删除 100 次,产生超过 200 行的代码。如果采用 VBA编程,那么仅需以下几句代码即可完成,而且将极大节省执行时间。
Sub 删除前 200 列中奇数列的值() ‘此过程代码放在模块中执行
For i = 1 To 200 Step 2 ‘从 1 循环到 200,步长值为 2(即隔 2 列删除一列的值)
Columns(i).Clear ‘将第 i 列的值删除
Next i ‘执行下一轮循环
End Sub
最后,录制宏的灵活性差。不管是单元格,还是工作表、图片、图表,在录制宏时都采用固定的名称,一旦实际情况变化时,录制宏产生的代码将会出错。例如在空白工作表中录制创建矩形并设置其格式的宏, Excel 会自动将图形命名为“矩形 1”,并对“矩形 1”设置格式。然而如果实际执行宏的环境产生了变化,宏代码在调用“矩形 1”时则可能失败。只有采用 VBA 编程才能让代码具有灵活性,自动适应环境的变化,让代码可防错,并且通用于不同环境。所以本书的重点是 VBA 教学,而不局限于应用宏。
评论
还没有评论。