《Excel VBA与VSTO基础实战指南》属于学习Excel VBA的初中级教材,重点阐述了Excel VBA的基本理论、代码自动化以及开发Excel插件的思路。通读《Excel VBA与VSTO基础实战指南》可以轻松应对制表工作中的疑难,同时还可以开发商业插件。《Excel VBA与VSTO基础实战指南》包括五部分内容,开头部分简述自动化操作的意义和成果展示;第二部分详细剖析VBA 的所有基础概念,包含代码的存放位置、写书方式、调用方式,认识对象、属性、方法与事件,以及理解变量、常量与数据类型并且掌握循环语句、条件语句、防错语句等知识;第三部分是VBA的高级应用,包含数组、窗体、字典、功能区设计、插件开发和撤销代码等知识;第四部分介绍通过VSTO开发Excel插件;第五部分提供365个VBA常见疑难解答。《Excel VBA与VSTO基础实战指南》每段代码都有思路分析,且对每句代码都提供了代码含义的详细注释,力求使讲解过程可以更加精准,让代码更易理解,为读者提供更优秀的阅读体验。
目前国内 VBA 图书讲插件开发思路的书极少,而市场对插件的需求却极大,开发插件有较广阔的前景。《Excel VBA与VSTO基础实战指南》不仅用较大的篇幅讲述插件开发相关的知识,而且加入了执行插件命令后可以撤销的设计思路,这在 VBA 图书市场上并无先例。《Excel VBA与VSTO基础实战指南》除 VBA 外,还提供 VSTO 知识,采用 VB.net 语法编写。
VSTO 比 VBA 更强大,能实现的功能也更多,同时还更安全。《Excel VBA与VSTO基础实战指南》详细罗列了VBA与VSTO在代码上的差异,然后演示修改VBA代码,使其符合VB.net语法规则的基本思路,从而让读者快速学会利用 VSTO 开发 Excel 插件。掌握《Excel VBA与VSTO基础实战指南》第16章到第19章的知识,仅需半个月即可学会VSTO,不需要像学习C#那样,耗费半年甚至一两年时间。
罗刚君,网名andysky,从事Excel研究及VBA二次开发10多年,擅长Excel函数、图表、透视表和VBA,尤其对Excel VBA有着相当丰富的开发经验和熟练的实战技能,也拥成丰硕的开发成果。
作者担任过近10个Excel相关论坛的版主,著有15本Excel图书,书名如下:
1.《Excel 2007 VBA范例大全》
2.《Excel 2007技法与行业应用实例精讲》
3.《Excel 2007 VBA开发技术大全》
4.《Excel 2007函数案例速查宝典》
5.《Excel VBA程序开发自学宝典》
6.《Excel 2010 VBA编程与实践》
7.《Excel 2010函数与图表速查手册》
8.《Excel VBA程序开发自学宝典(第2版)》
9.《Excel函数、图表与透视表从入门到精通》
10.《来吧!带你玩转Excel VBA》
11.《Excel VBA程序开发自学宝典(第3版)》
12.《Excel 2013函数案例自学宝典(实战版)》
13.《Excel 2013 VBA编程与实践》
14.《Excel 2016实用技巧自学宝典》
15.《Excel VBA与VSTO基础实战指南》
第 1 章 自动化操作 . 1
1.1 自动化操作的价值 1
1.2 利用宏简化日常工作3
1.3 使用 VBA 强化 Excel 功能.12
1.4 Excel VBA 的发展前景 15
1.5 课后思考 16
第 2 章 代码应用基础 17
2.1 区分 VBE 代码窗口 .17
2.2 录入代码 25
2.3 四种代码执行方式 . 32
2.3.1 调用快捷键 . 32
2.4 保存代码 36
2.5 让代码畅通无阻 . 37
2.6 反复调用相同代码 39
2.7 课后思考. 40
第 3 章 从概念开始认识 VBA .42
3.1 认识过程.42
3.2 关于参数. 49
3.3 理解对象54
3.4 对象的属性与方法 56
3.5 对象的事件. 59
3.6 课后思考 63
第 4 章 对象及其层次结构.65
4.1 查看所有对象 65
4.2 对象的层次与引用方式. 67
4.3 Range 对象 . 74
4.4 图形对象 95
4.5 表对象 98
4.6 工作簿对象 101
4.7 Excel 应用程序对象 103
4.8 课后思考 105
第 5 章 揭密数据类型与变量、常量 106
5.1 数据类型 106
5.2 定义变量 112
5.3 定义常量 122
5.4 课后思考 123
第 6 章 条件语句与循环语句 125
6.1 If 语句解析. 125
6.2 Select Case 语句解析. 140
6.3 IIf 函数 . 145
6.4 For Next 语句解析. 147
6.5 For Each…Next 语句解析. 153
6.6 Do Loop 语句解析 . 156
6.7 课后思考 166
第 7 章 四类常见对象的应用案例 168
7.1 单元格对象 168
7.2 图形对象 186
7.3 工作表对象 194
7.4 工作簿对象 204
7.5 课后思考 211
第 8 章 深入剖析 VBA 的各种事件 . 212
8.1 事件的级别与顺序 212
8.2 禁用与启用事件 . 215
8.3 工作表事件详解 . 217
8.4 工作簿事件详解 . 229
8.5 应用程序级事件详解. 239
8.6 按时间执行代码 242
8.7 课后思考 244
第 9 章 处理代码错误 245
9.1 代码错误类型分析 245
9.2 错误处理语句 248
9.3 案例应用 258
9.4 课后思考 265
第 10 章 使用数组提升程序效率 267
10.1 基本概念 . 267
10.2 数组函数 . 281
10.3 案例分析 . 289
10.4 课后思考 . 302
第 11 章 集合与字典的应用 .303
11.1 Collection:集合 303
11.2 Dictionary:字典 310
11.3 课后思考 . 321
第 12 章 设计程序窗体 . 323
12.1 窗体与控件简介 323
12.2 设置属性 . 335
12.3 窗体与控件的事件 355
12.4 窗体应用实战 366
12.5 课后思考 . 375
第 13 章 定义 Ribbon 功能区选项卡 377
13.1 功能区选项卡开发基础. 377
13.2 Ribbon 定制之语法分析 . 380
13.3 使用回调函数强化功能区. 395
13.4 使用模板 . 408
13.5 课后思考 . 412
第 14 章 开发通用插件. 413
14.1 插件的分类 413
14.2 漫谈加载宏 414
14.3 制作工作表批量重命名插件 . 417
14.3.6 安装并测试功能 422
14.4 课后思考 . 425
第15 章 让 VBA 代码也能撤销 .426
15.1 突破撤销限制 426
15.2 设计可撤销的插件 428
15.3 课后思考 . 436
第 16 章 使用 VSTO 设计插件的基本步骤.437
16.1 安装 Visual Studio 2015 437
16.2 Excel 插件开发流程 440
16.3 将插件打包成安装程序. 444
16.4 课后思考 . 449
第 17 章 VSTO 与 VBA 的差异450
17.1 变量、常量与数据类型. 450
17.2 函数 . 452
17.3 数组 . 454
17.4 窗体 . 455
17.5 字典与正则表达式 459
17.6 菜单与功能区 460
17.7 管理文件与目录 461
17.8 杂项 . 463
17.9 课后思考 . 465
第 18 章 将 VBA 插件升级为 VSTO 插件 466
18.1 设计插件框架 466
18.2 升级 Sub 过程“创建工资条” . 468
18.3 升级窗体“文件批量命名” . 470
18.4 升级事件过程“零值控制器” . 477
18.5 打包安装程序 478
18.6 课后思考 481
第 19 章 VSTO 的更多高级应用482
19.1 添加窗体状态栏 482
19.2 创建任务栏图标 484
19.3 自动发邮件 486
19.4 全自动合并数据 488
19.5 设计任务窗格 494
19.6 课后思考 . 498
第 20 章 365 个 VBA 常见问题答疑499
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 教学,而不局限于应用宏。