2.4 案例05:恢复工资表
本案例的资料文件“案例05:恢复工资表.xls”中有一张工资条样式的工作表,如图2-28所示。现要求编写VBA代码,将图2-28中的工资条恢复成图2-16所示的工资表样式,结合案例04中的代码,在工作表中添加两个按钮:“生成工资条”和“恢复工资表”,并分别绑定对应的宏。

图2-28 工资条
2.4.1 案例解析
在将工资条恢复成工资表时,需要将多余的表头逐一删除。
首先整理逐一删除多余表头的操作,每选中一行表头并删除,Excel会自动将下方数据上移一行,因此当前选中行的下一行是另一个表头,如图2-29所示。因此,我们得到录制宏的两个重复步骤:删除选中的行,然后选中下一行。

图2-29 删除一行表头后,将光标下移一行,即可选中下一行表头
使用相对引用录制上述两个步骤(注意,在开始录制前,应先选中表头),代码如代码清单2-8所示。
代码清单2-8
Selection.Delete Shift:=xlUp
ActiveCell.Offset(1, 0).Rows("1:1").EntireRow.Select
将代码清单2-8嵌入For循环,重复执行足够多次数,即可完成本案例。注意,在执行For循环之前,应先选中工作表第3行(第一个多余表头),相关代码可通过录制宏获取(录制时使用绝对引用),也可参照2.3.1节中的代码清单2-6进行修改,结果如代码清单2-9所示。
代码清单2-9
Rows("3:3").Select
2.4.2 案例代码
“恢复工资表”的代码见代码清单2-10。
代码清单2-10
Sub 恢复工资表()
Dim i As Integer '定义For循环的计数变量
Rows("3:3").Select '选中工资表第3行的表头
For i = 1 To 10 '重复10次“删除整行并下移一行”的操作
Selection.Delete Shift:=xlUp
ActiveCell.Offset(1, 0).Rows("1:1").EntireRow.Select
Next
End Sub
2.4.3 案例小结
在实际工作中,很难遇见将工资条恢复成工资表样式的需求,本案例的意义在于再次尝试整理出解决问题时需要重复操作的步骤。
提醒一下,在执行宏之前,务必备份工作表,因为 宏的操作无法撤回 !
本案例还需要在工作表上创建两个按钮:“生成工资条”和“恢复工资表”,并分别绑定案例03和案例04中的宏,结果如图2-30所示。

图2-30 工作表上的按钮