Excel 2016 VBA入门与应用
上QQ阅读APP看书,第一时间看更新

2.1 了解VBA的好工具——宏

宏是一系列存储于Visual Basic模块中的命令和函数,它们记录了用户的一段操作,能够在需要时执行以重现用户的操作过程。宏相当于一段记录用户操作的录像,在任何需要的时候可以重现。因此,使用宏是避免大量重复操作、实现操作自动化的好办法。

2.1.1 认识宏

Excel具有录制宏的能力,录制宏可以通过宏录制器来进行。录制完成的宏,将作为VBA程序代码存储在模块的“代码”窗口中。下面以录制一段向指定的单元格区域中填充颜色的宏为例来介绍录制宏的方法。

(1)启动Excel 2016并创建名为“使用宏”的工作簿,打开“开发工具”选项卡(Excel 2016默认并没有该选项卡,添加的方式参考下面的说明),在“代码”组中单击“录制宏”按钮。此时将打开“录制宏”对话框,在对话框的“宏名”文本框中输入宏名称,将插入点光标放置到“快捷键”文本框后按键即可设置启动宏的快捷键,如这里输入字符k,再按“Ctrl+K”键将执行宏,如图2-1所示。

图2-1 打开“录制宏”对话框

提示:“录制宏”对话框的“保存在”下拉列表用于设置录制的宏的保存位置。当选择“个人宏工作簿”选项时,在其他工作簿中可以使用该宏;如果选择“新工作簿”选项,则录制的宏将保存在新工作簿中;如果选择“当前工作簿”选项,则录制的宏将保存在当前使用的工作簿中,也就是只有当前的工作簿可以使用。

(2)完成设置后单击“确定”按钮关闭“录制宏”对话框,即可开始宏的录制。这里,选择单元格区域,并设置单元格的填充颜色。完成宏录制后,在“开发工具”选项卡的“代码”组中,单击“停止录制”按钮停止宏的录制,如图2-2所示。

图2-2 单击“停止录制”按钮停止宏的录制

使用上述方法录制的宏有一个问题,那就是在使用该宏时,每次都会只对录制宏时选择的单元格进行操作。这是因为在录制宏时,默认使用的是单元格的绝对引用,宏中进行操作的单元格永远是录制时选择的单元格。要解决这个问题实际上很简单,那就是将单元格的引用设置为相对引用。要使用相对引用,在录制宏之前,将“开发工具”选项卡的“代码”组中的“使用相对引用”按钮按下,在进行宏录制时,如果涉及单元格的引用都将使用相对引用,如图2-3所示。

图2-3 按下“使用相对引用”按钮

2.1.2 宏与VBA

宏的英文名为Macro,是能够自动执行某种操作的命令集合。宏实际上是由Office自动生成的一段VBA代码。如在完成上一节宏的录制后,按“Alt+F11”键打开“Visual Basic编辑器”,可以看到在“工程资源管理器”中会出现一个模块,双击“模块1”选项打开该模块的“代码”窗口,在该窗口中可以看到操作所对应的VBA代码,如图2-4所示。

图2-4 “代码”窗口中的VBA代码

录制宏的过程并不能算是编写程序的过程,但是录制宏能够实现与编程相近的功能,能够让需要多个步骤完成的工作一键完成。录制宏可以按照操作顺序如实地记录所有用户的操作,所以宏的执行总是产生与录制时的操作完全一致的结果。使用宏的最大优势就在于其使用渐变,录制宏只需要基本的操作,不需要顾及代码的含义、语法和编程思路。只要记录操作,宏代码就自动生成了。

但是使用宏也有其缺点:首先,并非所有的操作都可以通过录制宏来进行,也就是说宏在全面性方面存在着不足;其次,录制宏时无论多么小心,在录制时都有可能产生一些冗余代码,从而降低宏的执行效率;另外,录制宏只能记录操作,生成的宏代码不能进行判断,这也大大限制了宏代码的适用范围;最后,录制宏缺乏灵活性,如录制时选择的单元格或对象,都是以固定模拟过程录制,一旦在操作时发生改变,宏就会产生错误。

因此,录制宏进行操作虽然方便快捷,但其固有的局限性决定了如果需要最大范围扩展Excel的功能,最好的方法就是使用VBA代码。编写VBA程序,无论是在灵活性、执行效率,还是在全面性方面都大大超越了宏。

VBA(即Visual Basic Application)是针对Office软件的一种程序语言,其能够帮助用户从繁杂的重复操作中解放出来,能够提高数据处理的效率,同时对Excel的功能进行扩展。实际上,VBA是一种所见即所得的编程代码,这使得它的学习和使用相对于其他语言要简单。几乎所有的VBA程序员开始都是通过录制宏来学习VBA的,这是学习VBA的一种速成捷径。甚至对于很多已经成为高手的VBA程序员同样对录制宏乐此不疲,因为录制宏可以直接借助于界面操作完成大部分的代码编写,程序员只需要对录制的宏代码进行修改和优化即可获得最终需要的代码。

录制宏对于编写VBA代码还可以起到词典的作用。无论初学者还是VBA编程高手,恐怕都无法记住所有的对象和它们的属性方法,当忘记了解决某个问题需要使用的对象,或者不记得某个方法的语法结构时,可以通过录制宏来产生对应代码,借助于该代码即可获知有关的信息。