作者:罗刚君
出版社:电子工业出版社
格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT
ExcelVBA程序开发自学宝典试读:
前言
Excel是所有制表软件中最优秀、市场占有率最高的一款软件,这归功于它强大且灵活的制表功能和二次开发平台,通过二次开发平台可以让用户开发新的工具,从而实现Excel本身不具备的功能,或者弥补Excel自身的不足。
Excel VBA还可以实现操作自动化,让某些工作全自动完成,进而全方位提升工作效率,这使得Excel从众多制表软件中脱颖而出。
通过VBA进行二次开发可以强化Excel的功能,将某些繁杂或者重复的日常工作简化,还可以通过VBA开发商业插件或者小型财务系统等。可以说Excel VBA已完全融入办公文员的日常工作,拥有VBA就等于拥有效率。
本书结构《Excel VBA程序开发自学宝典(第3版)》是适合自学的VBA教材,它包含了Excel VBA的所有基础理论和高级应用。全书24章,分上下篇,各包含12章。上篇讲述VBA相关的基础理论及综合练习,下篇提供VBA高级应用的相关知识。
上篇主要介绍Excel VBA的基础知识,并通过这些知识的综合应用加深读者的理解。具体包含VBA代码的产生方式、存放方式、调用方式、保存方式、程序结构、四大基本概念(对象、属性、方法和事件)、变量与数据类型、常用语句的语法介绍(包含创建输入框、条件判断语句、循环语句、错误处理语句、选择文件与文件夹),然后提供综合应用案例,帮助读者理解前面所介绍的基础知识,从而让知识系统化。
最后还提供编程规则与代码优化技巧,以及编程的捷径,教读者掌握更高效的编程方式,以及提升程序的效率。具体的章节名称如下:
第1章 初步感受VBA的魅力 第2章 VBA程序入门
第3章 VBA的程序结构分析 第4章 VBA四大基本概念
第5章 通过变量强化程序功能 第6章 深入剖析常见对象的引用方式
第7章 常用语句的语法剖析 第8章 让代码自动执行
第9章 综合应用案例 第10章 编程规则与代码优化
第11章 利用参数强化过程 第12章 编程的捷径
下篇主要介绍Excel VBA的高级应用,包含数组、正则表达式、自定义函数、设计窗体、FSO、类模块知识、注册表、功能区设计、插件设计和封装代码等知识。其中重点在于数组、字典、窗体、功能区、开发插件,对于任何一个VBA高级用户而言这些领域都是不可或缺的,掌握这些应用后才能开发出大中型的高效的程序。具体的章节名称如下:
第13章 利用数组提升程序效率 第14章 正则表达式与VBA
第15章 详解字典应用 第16章 开发自定义函数
第17章 设计窗体 第18章 处理文件与文件夹
第19章 认识类和类模块 第20章 VBA与注册表
第21章 Ribbon功能区设计 第22章 开发通用插件
第23章 代码封装技巧 第24章 开发逐步提示的数据录入助手
本书特点
相对于同类书籍,本书在内容编排上具有以下特点。(1)除了对VBA语言的基础语法与常见对象的综合应用介绍以外,重点展示如何开发一个独立、完善、拥有专用菜单的通用程序,E灵(早期名称为“Excel百宝箱”,官方网址为http://excelbbx.net)正是基于本书所介绍的知识点而开发的。
通过本书,你完全可以编写出自己的商业插件,也可以通过Excel插件大幅度提升工作效率,让以往可能需要一个小时的工作量在几秒内即可完成。(2)本书基于Excel 2010写作,但是代码通用于Excel 2007、Excel 2010和Excel 2013。由于Excel 2003即将被淘汰,因此本书不再讲述传统菜单的设计方法,而是重点讲述功能区的开发思路,并提供若干功能区模板,从而让读者可以快速设计功能区组件。(3)本书比较注重代码的通用性和效率,总结了多条优化代码的规则。(4)正则表达式可以强化VBA的字符处理能力,本书详细地阐述了正则表达式的调用方法、语法,并提供了大量案例与思路,这在所有VBA书籍中是独一无二的。(5)详细教学保护代码的方法,防止他人查看自己的程序源代码。同时展示VBA代码加工成exe格式的可执行程序的思路,提升代码的易用性和专业性。(6)随书光盘中提供了书中的所有案例源代码,并对每一句代码提供含义注释,便于读者快速理解过程的含义与设计思路。
光盘文件介绍
本书提供随书光盘一张,光盘中存放了案例文件、视频教材和Excel百宝箱。
1.案例文件本书的随书光盘中存放了书中的所有案例文件的源代码,读者在学习本书前应该将随书光盘中的文件复制到磁盘中,然后将案例文件配合图书阅读,从而提升学习速度。切不可通过手工逐字摘抄书中代码的方式来测试代码,因为摘抄代码的出错概率太高了。
2.视频文件
本书的随书光盘提供了8集VBA视频教材,读者可以看完本书后再观看视频教材,但不宜先看视频后看图书。
3.Excel百宝箱
为了感谢读者对本书的支持,特赠送大型插件“Excel百宝箱”。“Excel百宝箱”是一个Excel插件,拥有100多个功能,可以强化Excel,弥补Excel的某些缺陷——例如合并单元格再取消合并后会丢失数据的毛病,再如Excel只支持顶端标题不支持低端标题、可以新建工作表但不能批量新建等问题。
随书光盘中提供了“Excel百宝箱”的安装文件,插件是开源的,未设置密码保护,读者可以随时查看其中的所有源代码。为了方便读者使用,光盘中还同步提供“Excel百宝箱”的动画教材,动画教材来自录像工具所生成的插件安装步骤和使用步骤,读者可以通过该动画教材快速掌握插件的每一个功能。
下图是“Excel百宝箱”的操作界面:
4.365个疑难问题
为了提升读者解决问题的能力,以及扩展读者的知识面,特在光盘中提供365个常见疑难问题及答案。
适合读者群
本书对VBA的基础理论有比较详尽的介绍,并提供了大量的案例引导读者逐步深入。
本书上篇介绍Excel VBA的入门知识,适合编程零基础的人群阅读。
本书下篇提供Excel VBA的高级知识应用,包括数组、类模块、正则表达式、功能区、窗体、封装代码等高级应用,同时还提供多个插件的开发过程演示,强化读者的动手能力,从实战中将基础理论转换为实战技能。
因此,适合本书的读者包括三类:(1)VBA零基础者,通过本书踏入VBA的大门。(2)已有VBA基础但需要扩充知识面者。本书涉及的VBA知识相当全面,包含了学习VBA所必需的基础知识,也提供了正则表达式、FSO、字典、注册表、功能区设计和封装代码等边缘性知识,从而让读者对VBA掌握得更全面。
本书还提供代码优化的诸多规则,掌握这些规则可让程序具有更强的通用性和执行效率。(3)已对VBA有相当的认识,但想开发更专业的商业软件者。本书对开发加载宏、自动化加载项和COM加载项都有详细的阐述。同时还提供制作安装程序的教学思路。
售后服务
为了帮助读者快速掌握本书的教学内容,作者特为本书提供售后服务QQ群(QQ群号码:4661142),读者可以申请加入本群参与讨论,以及就阅读过程中遇到的疑难向作者提问,作者会随时在线提供解答。
除了QQ群外,本书还提供售后服务论坛,网址如下:
http://www.exceltip.net/
读者可以通过以上QQ群或者论坛反馈阅读心得,或者提交对本书的建议。同时,如果读者发现书中有错别字,也请读者在QQ群中进行反馈,我们在下次印刷时将会改进。
在阅读本书时,有疑问可以随时在售后论坛发帖,有专人负责解答,周末无休。
也可以向作者发送邮件(邮箱地址:888@excelbbx.net或者Excelbbx@163.com)获得帮助与答疑。
感谢
参与本书编写工作的还有杨嘉恺、王丽云、姚书杰、龚莉、马世梅、余敏键、龚丹、王军、吴炎翠、王益明、杨阳、胡清春、葛度金、章兰新,在此表示感谢!罗刚君2014年7月第1章初步感受VBA的魅力
简单地说,Excel VBA是依附于Excel程序的一种自动化语言,它可以使程序自动执行、批量执行、定时执行……类似于DOS操作系统中后缀名为“.bat”的批处理文件,但它比DOS系统的批处理功能更强大。在进入VBA的实质性开发阶段之前,先来感受VBA的独特魅力吧!
需要特别说明的是——本章仅向读者展示VBA的优越性,让读者通过两个案例了解VBA的自动化,对于案例中所涉及的每句代码有何含义及程序设计思路请完全忽略,在后面的章节自有详解。1.1批量任务一键执行
VBA可以一键执行批量任务,大幅度提升制表效率。某些原本需要几小时方可完成的工作量改用VBA程序来实现则往往仅需要几秒钟,此类案例不胜枚举。本节通过从身份证号码中提取信息向读者展示VBA的魅力,同时也引出后续章节的VBA编程教学。1.1.1 准备工作
本书的所有案例文件都存放在随书光盘中,请读者将光盘中的“案例文件”文件夹复制到计算机的硬盘中,然后再跟随书中的操作步骤测试代码。
如果你的计算机没有光驱,或者光盘在运输过程中被损坏,请与作者罗刚君联系。联系方式包括QQ(QQ号码:670218239)和电子邮箱(电子邮箱地址:888@excelbbx.net)。
本书以Excel 2010为蓝本进行讲解,默认采用xlsm格式的文件,Excel 2003或者Excel 2013的用户也可以按相同的步骤学习。1.1.2 程序测试
假设你已经将随书光盘中的“1-1 一键提取身份证信息.xlsm”文件复制到硬盘中,请按以下步骤操作。
step1 双击打开“1-1 一键提取身份证信息.xlsm”文件。
step2 如果在工作表上方弹出如图1.1所示的安全警告,则单击右方的“启用内容”按钮。图1.1 安全警告
step3 选择B列所有存放身份证号码的区域——假设为B3:B6,然后单击首行单元格中的“从身份证号码获取信息”按钮,程序会根据所选身份证号码瞬间生成对应的性别、出生日期和年龄等信息。效果如图1.2所示。图1.2 根据身份证号码提取职工年龄、出生日期与性别
本例文件参见光盘:..\第一章\ 1-1 一键提取身份证信息.xlsm1.1.3 案例点评
在前面的案例中,已知身份证号码可以提取身份证号码持有人的性别、出生日期和年龄,而且不管选中的是单个还是数万个身份证号码都可以在几秒钟提取所有信息。如果在制作人事资料表时手工逐一录入身份证号码所对应的性别、出生日期和年龄,那么录入10000条数据估计得耗费10小时,而利用VBA代码可以在几秒钟内完成,这正是VBA的魅力体现。1.2多工作簿自动汇总
将文件夹中所有工作簿的所有工作表汇总到一个工作表中,这是很常见的工作需求。按常规的操作方式——逐一打开工作簿并逐一复制所有工作表中的数据到活动工作表中再汇总,这可能耗费几十分钟,还无法确保没有遗漏某些数据。而采用VBA跨工作簿汇总不仅快捷、准确,甚至都不需要按快捷键或者单击菜单,只要打开工作簿就全自动完成。
在接触VBA之前,读者可能会产生疑问:这有可能吗?完全有可能!在VBA的世界里,瞬间完成操作和全自动执行命令是极其常见的。本节将展示打开工作簿时全自动汇总的案例。1.2.1 案例需求
在“生产日报表”文件夹中存放了若干个工作簿,每个工作簿中有若干个工作表,每个工作表中有若干行产品生产记录,这些数据的行数都不确定。图1.3和图1.4分别展示了文件夹中的工作簿,以及工作簿中的数据结构。图1.3 生产日报表图1.4 生产数据
现要求对“生产日报表”文件夹中所有工作簿的生产数据按产品名称分类汇总,并且该文件夹中的工作簿数量增减或者工作簿中的数据增减后,汇总结果也会相应变化。
假设“生产日报表”文件夹中有数百个工作簿,每个工作簿中有数十个工作表,人工逐一汇总将是相当浩大的工程,可能会用10分钟,也可能会用1小时,视工作簿数量的多少而定。
然而,采用VBA代码汇总可以全自动完成,打开“汇总表.xlsm”后不用做任何事情就已经汇总成功。你是否怀疑VBA能此等智能呢?1.2.2 程序测试
随书光盘中已经提供了4个待汇总的工作簿和用于汇总的程序代码,读者可以使用它们测试代码的正确性和执行效率。具体操作步骤如下。
step1 将光盘中“第一章”文件夹下的“1-2合并工作簿”文件夹复制到硬盘中。
step2 双击打开“汇总表.xlsm”文件,假设弹出了如图1.1所示的安全警告,单击右方的“启用内容”按钮。
在打开工作簿的瞬间,工作簿中的VBA代码会全自动汇总当前路径下的所有生产数据。如图1.5所示是汇总结果。图1.5 汇总结果
事实上,“汇总表.xlsm”中的代码并非是专门针对图1.3中所示的4个工作簿所写的,而是具有通用性,即使该文件夹中的工作簿增加到100个,每个工作簿中的工作表数量也增加到100个,不需要修改代码,打开“汇总表.xlsm”后同样可以瞬间完成汇总。
本例文件参见光盘:..\第一章\1-2合并工作簿\汇总表.xlsm1.2.3 案例点评
以上案例主要涉及了VBA的多个知识点,包括变量与数据类型、工作簿事件、循环语句、数组、合并计算、区域引用等。将它们组合后可以自动汇总具有相同格式的工作簿,既快捷又准确,也不会遗漏任何数据,比人工分类汇总能千百倍地提升效率。
事实上,这也是VBA之所以吸引用户的原因之一。1.3浅谈VBA优势
Excel是制表行业中最优秀的表格软件,它提供了诸多的数据处理工具,其中最强大的莫过于二次开发工具VBA,它不仅能批量执行任务,全自动执行命令,还可以改善Excel的内置功能,实现诸多Excel原本无法实现的功能。
本节向读者阐述Excel VBA相对于Excel其他功能在制表工作上的一些优势。1.3.1 批量执行任务
常规的制表手法只能一次执行一项任务,例如删除100个工作表中的错误值,需要手工操作1000次以上,包括逐个激活工作表,然后定位错误值所在的单元格,再删除错误值。如果改用VBA删除100个工作表中的错误值可以一键完成,整个过程不超过1秒钟。
删除错误值的代码可以重复使用,一键调用,而且自动适应数据变化。1.3.2 将复杂的任务简单化
Excel的诸多小功能可以搭配使用,从而实现比单个工具更强大的功能。例如公式、定位、插入行三者配合可以实现在工作表中隔行插入行。然而此操作过程过于烦琐,也很难在短时间内教会他人使用。用VBA开发一个隔行插入行的工具则可以一键完成,既提升操作效率又减少教导他人使用的时间成本。
再如使用公式从身份证号码中提取年龄和性别信息,需要多个函数嵌套使用,录入长长的公式既费时费力,又加大查看报表者的理解难度。使用VBA一键生成结果可以全方位地简化工作流程,以及减少教学成本。当公司有新人进来时,可以不用再花太多的时间教其函数与数组公式的用法,或者多个内置功能的嵌套技术,仅需要告知单击某个按钮能实现某个功能即可。1.3.3 提升工作表数据的安全性
利用VBA代码可以对数据进行多层保护,在特殊需求下,VBA可以保护数据不让普通用户胡乱修改,甚至可以让未授权的用户只能看到乱码,授权后才能看到原文。1.3.4 提升数据的准确性
VBA的准确性体现在录入数据和运算数据两个方面。
首先,VBA可以对用户录入的数据执行限制,从而防止用户意外录入不规范字符。例如录入数值时误录入了两个小数点,或者意外插入了字母导致后期运算出错。
其次,使用公式统计数据时公式不会随数据增减变化而变化。例如使用公式统计所有工作表B列的产量,当新建一个工作表后公式的计算结果无法自动更新,而VBA可以自动适应数据的增减变化,这是VBA独有的一个优势。1.3.5 完成Excel本身无法完成的任务
录入阿拉伯数字时自动转换成英文大写形式的金额、录入公历日期自动提示对应的农历日期、行程安排与预告,或者修改注册表等需求皆无法通过Excel的常规方式实现,而VBA处理此类问题则得心应手。1.3.6 开发专业程序
利用VBA还可以开发专业性的程序,例如报表汇总软件、进销存管理系统、人事管理系统等,也可以通过VBA开发表格插件。笔者本人就开发了一个大型的Excel插件——E灵,它包括180多项功能,可以大大扩展Excel的应用领域。软件的官方网址为:http://excelbbx.net/。
E灵的界面如图1.6所示。图1.6 Excel插件E灵的操作界面
通过前面的案例演示和对VBA优势的阐述,你是否已经被Excel VBA的魅力所折服呢?
从第2章开始,本书将带领读者走进Excel VBA的世界,去尽情领略VBA的强大功能,同时也要学会驾驭Excel VBA,以致为我所用,提升制表工作的效率。第2章VBA程序入门
编程的重点在于熟悉语法、思路灵活,以及善用代码模板。然而进入实质性的编写代码之前有必要了解一些与编程相关的基本常识,包括代码放在哪里、如何产生代码、如何保存代码,以及如何放行被宏安全性挡住的代码等入门知识。2.1如何存放代码
学习VBA往往并不是从自己编写代码开始,而是先从网上复制他人写好的代码,或者摘抄教材中的现成代码,然后再逐步掌握语法,从而学会修改与编写代码。在这个过程中,涉及了代码存放位置的问题,只有将代码保存在正确的位置才能发挥代码的功效。2.1.1 认识模块
VBA的前身是宏(Macro),一段VBA程序也曾被称为一个宏,而在VBA中更专业的称谓是过程。一段完整的VBA程序就是一个过程。
过程分为三种——以Sub开头的子过程、以Function开头的函数过程,以及以Property开头的属性过程。在实际工作中90%以上的情况下都在使用子过程,因此本书前15章都只涉及子过程,在第16章才详解开发自定义函数,展示Function过程的结构、语法和开发思路。属性过程在工作中一般不用,本书不涉及属性过程的教学。
子过程有多种用法,采用不同用法时代码的存放处所也各不相同,但是比较通用的办法是将子过程代码存放在模块中。至于其他的存放方式会在后面更高阶的章节中有相应的介绍。
那么什么是模块?如何调出模块的界面?请按以下步骤操作。
step1 打开Excel进入工作表界面。
step2 按
知识补充:在VBA中,一个工作簿拥有一个工程(VBAProject),Excel允许同时打开多个工作簿,因此在VBE界面中也可能存在多个工程。如果读者确认自己只打开了单个工作簿,但却在VBE界面中发现了多个工程,这说明你安装了若干个加载宏。可以在工作表界面按
step3 单击菜单中的“插入”→“模块”命令,在属性窗口上方将会出现一个默认名称为“模块1”的模块,右侧的空白窗口则是此模块对应的代码窗口,用于存放VBA程序代码,如图2.2所示。图2.2 模块与模块代码窗口
step4 如果需要更多的模块,那么再次单击菜单中的“插入”→“模块”命令,在属性对话框上方将出现名为“模块2”的空白模块。
以上步骤用于插入模块,在2.2节中会讲述如何在模块中产生代码。2.1.2 管理模块
模块用于存放程序代码,同一个模块中不宜存放太多的过程代码。为了便于管理,通常将代码分类存放,例如第一个模块存放与“财务”相关的程序代码,第二个模块存放与“人事”相关的程序代码。
当模块数量超过一个时,需要对模块重命名,尽量使任何人看到模块名称就能明白每个模块中存放了哪方面的代码。对模块重命名可按以下步骤操作。
step1 单击选中要重命名的“模块2”。
step2 查看VBE窗口中是否存在属性对话框,如果没有则单击菜单中的“视图”→“属性窗口”命令。
step3 在属性窗口的“(名称)”属性中将默认名称“模块2”修改为“财务模块”,效果如图2.3所示。图2.3 将“模块2”重命名为“财务模块”
如果需要删除“财务模块”,那么在模块上单击鼠标右键,从弹出的右键菜单中选择“移除财务模块”命令即可。
知识补充:属性窗口上方包含工作簿与工作表名称的窗口被称之为“工程资源管理器”,如果不小心被关闭会给查看代码和编程带来障碍,此时可以单击菜单中的“视图”→“工程资源管理器”命令将它调出来。2.2如何产生代码
有4种方式可以产生代码,包括复制他人已经编好的程序代码、录制宏产生宏代码、手工编写程序,以及调用代码模板然后加以修改,本节一一剖析它们的区别与利弊。2.2.1 复制现有的代码
几乎所有人在初学VBA时都是复制他人编好的代码来使用,待掌握好VBA的对象、属性、方法和事件等基础概念,以及循环语句、条件语句等常用语句后才自己编写代码。
复制代码的渠道有很多,主要包含以下两种。
1.从随书光盘中获得代码
介绍VBA的图书都配有光盘,读者在初学VBA时应尽量复制光盘中的代码去测试,而不是将代码中的字符逐个录入到模块中。因为手工抄写代码出错的几率比较高,除了人为录入失误和看错字符导致出错外,还有某些代码比较长以致在书中印刷为2行或者3行,而读者很难正确地判断书中印刷的多行代码是一句代码还是多句代码,特别是代码中的空格刚好位于行末或者行首时比较容易判断失误。
鉴于以上分析,初学者在学习代码时应该复制随书光盘中的代码来使用,待学完VBA的基础知识后再手写代码,否则一旦代码出错将无所适从。初学者根本不具备调试程序的能力,一旦出错的次数过多又不能及时纠正,就会影响继续看书的兴趣和动力,同时打击初学者的信心,以致放弃学习VBA。
2.从论坛复制代码
各大Excel论坛都有大量公开分享的代码,可以从论坛中复制需要的代码到自己的模块中,或者学习他人的编程思路。
目前中国比较有影响力而且内容更新比较快的两大论坛有:http://www.exceltip.net/;http://club.excelhome.net/。2.2.2 录制宏
录制宏是学习Excel VBA的便捷工具,不管是初学者还是具有多年编程经验的老程序员都会通过录制宏来产生宏代码,然后再根据需求修改宏代码。
录制宏时使用的是Excel自带的操作记录器,它可以用代码记录下用户的当前操作。当结束录制后可以重播代码,让代码代替手工操作去批量执行相同的命令,从而减轻用户的工作量。它类似于生活中的录音机,例如老师教第一批学生时可以将声音录制下来,教第二批学生、第三批学生时只要播放录制好的光盘或者磁带即可,不再需要一遍遍重复口述,从而减轻工作量,这与VBA的录制宏如出一辙。
下面以录制“清除工作表中所有图形对象”宏为例,介绍录制宏与重播宏代码的步骤。
step1 新建一个空白工作簿,在默认的3个工作表中都插入多张任意图片。
step2 单击状态栏左方的“录制宏”按钮,从而调出“录制新宏”对话框。“录制宏”按钮的外观如图2.4所示。如果读者使用的是Excel 2013,由于Excel 2013在默认状态下关闭了“录制宏”按钮,因此需要在状态栏单击鼠标右键,在弹出的右键菜单中选择“录制宏”选项。如图2.5所示为Excel 2013中“录制宏”按钮的外观。图2.4 Excel 2010的录制宏按钮图2.5 Excel 2013的录制宏按钮
step3 在“录制新宏”对话框中按图2.6所示的方式设置。其中“宏名”保持为默认值“宏1”即可,在“快捷键”文本框中输入小写字母q,表示为当前宏指定的快捷键为
step4 单击“录制新宏”对话框中的“确定”按钮启动录制宏。
知识补充:在录制宏阶段,所有操作都会被记录器记录下来。为了避免产生不必要的代码,启动录制宏后应小心翼翼地操作,确保每一个步骤都是必要的,不能随意操作。
step5 按
step6 在“定位条件”对话框中选择“对象”单选框,如图2.7所示。图2.6 “录制新宏”对话框图2.7 定位对象
step7 在“定位条件”对话框中单击“确定”按钮从而选中活动工作表中的所有图形对象,然后按
step8 单击状态栏左方的“停止录制”按钮(图标)。
step9 按
step10 再次按
step11 进入Sheet2工作表中,按
知识补充:图形对象包括图片、艺术字、文本框、图表、剪贴画和对象等。
根据以上操作步骤,读者们应该对录制宏有了初步认识,具体可以总结为以下4点。
◆ 如实记录操作
录制宏的目的是记录自己的所有操作,将人工操作转换成对应的VBA代码。这对于学习VBA而言极为重要,既可以通过录制宏与重播宏代码来简化某些重复性的工作,又可以为编程提供参考,避免编写程序时逐个录入字符。
通过录制宏自动产生代码,然后根据自己对VBA的了解对代码进行后期加工,这可以提升编程效率,而且即使忘记代码的书写方式也能编程。
◆ 宏代码保存在模块中
录制宏产生的过程一律属于子过程,以Sub开始,保存在模块中。
◆ 可用快捷键调用宏
录制宏时可以为宏指定包含Ctrl的快捷键,从而方便用户调用宏命令。当指定为小写的字母q时表示快捷键为
◆ 一键执行批量命令
录制宏时不管操作了多少个步骤,调用宏时只需要单个步骤。
以上4点中第一点最重要。对于VBA爱好者而言,录制宏的目的不是使用宏,而是借助录制宏产生自己需要的代码,从而提升编程效率,以及减少记忆代码的学习时间。例如插入行的代码忘记了、创建条件格式和数据有效性的代码也忘记了,这完全不重要,只要录制宏马上就产生代码,开发者只需要将宏代码中需要的代码提取出来即可,而不再像学英语那样得反复背诵一个个单词。以此立场评价录制宏,可以说录制宏工具是VBA爱好者终生的良师益友,而且可以随时请教,不分场合与时间。
本例文件参见光盘:..\第二章\2-1录制宏.xlsm2.2.3 手工编写代码
录制宏能给编程带来莫大的帮助,不过Excel中的部分操作(不到40%)无法通过录制宏产生代码,因此对于这部分操作只能自己手工编写代码。当然,如果你学完VBA后,掌握了VBA中的常用对象、方法和属性名称,也可以不录制宏,可以随手编写程序代码。
手工编写程序可以借助VBE中的“插入”菜单完成,具体步骤如下。
step1 单击菜单中的“插入”→“过程”命令,弹出“添加过程”对话框,如图2.9所示。
step2 在“添加过程”对话框的“名称”文本框中输入“计算工资”,将过程的类型设置为“子过程”,将范围设置为“公共的”,然后单击“确定”按钮,从而产生一个子过程的程序外壳,效果如图2.10所示。图2.9 插入子过程图2.10 自动产生子过程的程序外壳
图2.10中的代码是一个空白的VBA程序,具有程序的声明语句和结束语句,没有需要执行的具体命令,该部分内容需要等读者了解VBA的四大基本概念,以及掌握常用语句的语法后再自行补充。
事实上,当足够熟悉VBA后可以直接在模块中手工录入代码,不需要借助菜单中的“插入”→“过程”命令。由于VBA具有智能补充代码的功能,手工声明过程同样高效。例如在模块中录入“Sub 工资条”,然后按Enter键,VBA会自动将缺失的部分补充完整,产生以下代码:
知识补充:VBA中的子过程的结构将在第3章进行详细分析,这里读者仅需要明白如何录入过程的程序外壳(即VBA程序的声明语句和结束语句)即可。2.2.4 从模板中获取代码
Excel有数百种对象,平均每个对象的属性和方法也有几十种,因此不管是多么专业的VBA程序员都不会将它们一一记在大脑中。通过记忆逐个录入字符的编程方式过于低效。
笔者在此给读者们一个很好的建议:在学习VBA的过程中,将自己每一次编写的程序的最终版本分类保存起来,当以后遇到同类需求时不需要再逐字录入代码,复制自己以前保存的代码并稍加修改即可,这样既提升编程的速度,又降低手工编码过程中的出错几率。
除了自制代码模板外,各大论坛也提供了VBA代码辅助工具。使用工具录入代码将大大提升录入速度,而且100%不会出现拼写错误。笔者本人就开发过一个VBA辅助工具“代码百宝箱2.0版”,读者有兴趣的话可以通过以下网址进行下载:
http://excelbbx.net/tishi/VBAsetup.rar
http://club.excelhome.net/thread-1080867-1-1.html
安装“代码百宝箱2.0版”工具后的界面如图2.11所示。图2.11 “代码百宝箱2.0版”工具2.3如何调用代码
VBA程序代码有多种不同的存在形式,不同的形式有不同的调用方式。本节仅讲解模块中不带参数的子过程的调用方法,对于带有参数的子过程、函数过程、事件过程或者类模块的程序代码将在后面的章节进行讲解。2.3.1 F5键
保存在模块中的子过程有5种常用的调用方式,包括使用
step1 在Excel的工作表界面按
step2 单击菜单中的“插入”→“模块”命令,从而创建一个新模块。
step3 在模块中录入以下代码:
以上代码的含义是通过Msgbox函数弹出一个信息框,在信息框中显示当前的时间。如果要显示“您好”,那么将函数“Now”替换成字符串“"您好"”即可,文字前后有一对半角双引号。
step4 单击过程“报告当前时间”的任意行代码,表示将它设置为当前过程。
step5 按
Msgbox是一个VBA函数,可以返回值。不过绝大多数情况下仅仅通过它弹出一个包含指定信息和具有指定按钮的对话框。关于它的语法在本书的附录A中有详细说明,请打开随书光盘中的“附录A Msgbox函数用法说明.pdf”文件,此处了解如何调用过程即可。
知识补充:VBE中的
在VBE界面中调用子过程使用
step1 在模块中录入过程“报告今天星期几”,代码如下:
代码中的Format是一个VBA函数,和工作表函数Text的功能相近,用于将数值转换成需要的格式。本例中Format的作用是将Now函数产生的时间值转换成中文的星期。
本例文件参见光盘:..\第二章\2-2 调用子过程的五种方法.xlsm
step2 按
step3 按
step4 选择列表中的过程“报告今天星期几”,然后单击“执行”按钮,弹出如图2.14所示的信息框,说明调用过程成功。图2.13 “宏”对话框图2.14 在信息框中展示今天星期几
知识补充:假设同时打开了多个工作簿,而且每个工作簿中都有无参数的子过程,那么“宏”对话框可以将所有工作簿中的子过程一并列出来。为了便于识别,它会在非活动工作簿的过程名称前添加工作簿名称,而活动工作簿中的过程则如图2.13所示的那样只显示过程名称。2.3.3 自定义快捷键
在录制宏时可以为当前宏指定快捷键(在图2.6中有说明)。事实上,在模块中手工编写的子过程中也可以用相似的办法指定快捷键。下面以过程“报告上午还是下午”为例,介绍为其指定快捷键的步骤。
step1 在模块中录入以下过程代码:
代码中AM表示上午,PM表示下午。
step2 按
step3 按
step4 单击“宏”对话框中的“选项”按钮,打开“宏选项”对话框,在“快捷键”文本框中输入小写字母q,如图2.15所示。
step5 在“宏选项”对话框中单击“确定”按钮返回“宏”对话框,然后再单击“取消”按钮返回工作表界面。
step6 按
试读结束[说明:试读内容隐藏了图片]