2.1 案例02:对不同工作表执行相同操作
本书附带的“案例资料”中含有学习案例时需要用到的Excel文件,案例02对应的Excel文件为“案例02:对不同工作表执行相同操作.xls”。打开该文件,可以得到图2-1所示的多张工作表。

图2-1 案例02对应的Excel文件
本案例要求对工作簿中的所有工作表依次进行如下操作:
- 删除C、D、E三列;
- 将“金额”列拖动至“订购日期”列的右侧;
- 筛选出“数量”列中大于200的行。
2.1.1 案例解析
因为案例02需要对多张工作表进行重复操作,所以可以考虑先操作一张工作表,并把操作的过程录制成宏,再在其他工作表上执行宏。
在Excel中,一个 宏 (Macro)其实就是一个VBA过程,只不过VBA过程是一段完整的VBA代码,而宏被具体成一个单独的命令。宏的作用与过程一样,可以按照一系列预定义规则完成一个指定的任务。
Excel的录制宏功能可将一组操作或者完成某项任务的步骤录制下来,转换为VBA过程代码,并形成宏命令,以便再次执行。
单击Excel功能区的“开发工具”标签中的“录制宏”按钮,会弹出图2-2所示的“录制宏”对话框。

图2-2 “录制宏”对话框
图2-2中的“宏名”可以根据实际需要填写,也可以使用默认名字,如“宏1”。其他选项可不用设置,直接单击下方的“确定”按钮。此时,“开发工具”标签中的“录制宏”按钮会变成“停止录制”按钮,如图2-3所示。从此刻起,所有在Excel中的动作都会被录制下来,直至单击“停止录制”按钮,录制结束。

图2-3 “录制宏”按钮变成了“停止录制”按钮
根据案例02的要求,在录制宏的状态下,在“1月”工作表中进行如下操作:
- 选中C、D、E三列,右键单击并选择“删除”;
- 选中“金额”列,将鼠标光标移至列边框上,当光标从十字方块变成十字箭头时,按住Shift键将其拖动至“订购日期”列的右侧;
- 选中“数量”列,单击工具栏上的“筛选”按钮,然后单击“数量”列的倒三角形打开下拉菜单,选择“数字筛选”,接着单击“大于(G)”,在弹出框中“大于”的后面输入数字200,最后单击“确定”按钮。
完成以上所有操作后,单击“停止录制”按钮。
打开“2月”工作表,在“开发工具”标签中单击“宏”按钮,会弹出图2-4所示的对话框,在“宏名”选项框中选中“宏1”(或自定义的其他宏名),单击“执行”按钮。

图2-4 “宏”对话框
在“2月”工作表中执行“宏1”后,效果如图2-5所示,符合本案例要求。在其他工作表中,执行“宏1”也会有同样的效果。案例02完成。

图2-5 在“2月”工作表上执行宏1的结果
注意,只有当工作表格式与“1 月”工作表完全一致时,“宏 1”的执行结果才能确保正确,这也是录制的宏在执行时必须满足的先决条件。例如,在“4月”工作表的最左侧插入一个空白列,使之与“1月”工作表的格式出现差异,如图2-6所示。

图2-6 在“4月”工作表的最左侧插入一个空白列
然后,在“4月”工作表上,执行“宏1”,就会出现错误的结果。
小贴士: 使用宏执行的操作无法被撤回,因此,在工作表中使用宏执行操作时,一定要提前做好备份,以便在出现错误结果后能够使用备份文件还原数据。
2.1.2 案例代码
本案例的代码暂时不需要详细解读,读者只需要知道如何在Excel中找到录制的宏代码。在Excel的“开发工具”标签中,单击“Visual Basic”,打开编辑器,然后双击“工程资源管理器”中的“模块1”,“宏1”的代码会显示在“模块1”的代码窗口中,如图2-7所示。

图2-7 “宏1”的VBA代码
如果“工程资源管理器”中有多个模块,那么最后录制的宏代码一般被保存在最后一个模块中;如果模块中有多个过程(多段VBA代码),那么过程名与宏名相同的代码就是录制的宏代码。
图2-7中的代码就是案例02所需的代码,详见代码清单2-1。
代码清单2-1
Sub 宏1()
Columns("C:E").Select
Selection.Delete Shift:=xlToLeft
Columns("G:G").Select
Selection.Cut
Columns("B:B").Select
Selection.Insert Shift:=xlToRight
Columns("G:G").Select
Selection.AutoFilter
ActiveSheet.Range("$G$1:$G$114").AutoFilter Field:=1, Criteria1:=">200",
Operator:=xlAnd
End Sub
2.1.3 案例小结
本案例引入了宏的概念,还介绍了如何在Excel中录制宏、如何执行宏,以及如何在Visual Basic编辑器中找到录制的宏代码等。
通过本案例,读者还应了解,虽然通过录制宏可以对不同的工作表进行相同的操作,但是必须保证不同工作表的格式一致。因此,在VBA的学习和使用过程中,录制宏往往并非解决问题的最终方法,而是获取解决问题所需代码的手段。