如何通过Excel实现批量打印工资条?
每月月初那几天时间(发工资时间)是财务MM最为苦恼的几天,她们除制作工资报表外还要制作工资条(每人一条),由于我公司员工有190多人,按照传统的复制、粘贴、排列方法她们要进行很长版面的重复操作,如果其中有某个数据要改动,牵涉的版面范围就很广,工作量很大。我“自告奋勇”为她们制作了一套工资条批量打印的模板,解决了她们的苦恼,这种方法也适用与大多数企业,下面向大家介绍。
财务MM给我提供了工资条格式(图1),由于工资条比较窄小,如果用Word的邮件合并功能,按默认设置只能一张纸打印一个工资条,浪费纸张不说,效率也不高,如果将工资条复制几份放在同一A4纸页面的话对邮件合并的数据源则要进行多纵列排版,数据源有变动需要修改的时候也很不方便,而且工资条里含有“金额大写”项目,用邮件合并功能也比较麻烦,经过综合考虑和比较,决定用Excel2003来制作带金额大写且能满幅面批量打印的工资条模板。
经询问得知工资报表为每月必做,决定采用调用工资报表数据来实现。通过测量,发现一张A4纸纵向放4个工资条比较合适。
一、修改工资报表
为方便数据调用和发放工资时能“对号入座”,我们在报表前插入两列,分别命名为“序号”和“工资条编号”,在A3单元格里输入=row()-2,在B3中输入=row()+2005049998,同时选中A3和B3单元格,往下拖动填充句柄到最后一行以产生能自动调整的序号和工资条编号。修改后报表格式如图2所示(其中某些无须用到的数据列已隐藏)。
二、制作工资条打印界面
1.设计打印内容界面
在工资报表工作簿里插入一个工作表,重命名为“打印”,并将原有工资条格式复制到里面,然后按以下步骤操作(这里的操作步骤比较多一点,不过对以后来说能做到“一劳永逸”):
在B2里输入=now(),并设置其单元格格式,“数字”标签中“分类”为“日期”,“类型”为“2001年3月14日”;在I2、A6、B5、C5、D5、E5、F5、G5、H5、B8、C8、D8、E8、F8中分别输入=VLOOKUP(M5,工资报表!A:R,2)、=VLOOKUP(M5,工资报表!A:R,4)、=VLOOKUP(M5,工资报表!A:R,5)、=VLOOKUP(M5,工资报表!A:R,6)、=VLOOKUP(M5,工资报表!A:R,7)、=VLOOKUP(M5,工资报表!A:R,8)、=VLOOKUP(M5,工资报表!A:R,9)、=VLOOKUP(M5,工资报表!A:R,10)、=VLOOKUP(M5,工资报表!A:R,11)、=VLOOKUP(M5,工资报表!A:R,12)、=VLOOKUP(M5,工资报表!A:R,13)、=VLOOKUP(M5,工资报表!A:R,14)、=VLOOKUP(M5,工资报表!A:R,15);在J5和F8中分别输入=SUM(B5:H5)和=J5-SUM(B8:E8),把它们的单元格格式都设置成“数值”并保留两位小数,在G8中输入=F8,设置其单元格格式为“特殊”中的“中文大写数字”,然后选择第1—9行行标号把此工资条往下复制3份并分别修改第2、3、4工资条中的公式,在所有内容保持不变的情况下只须将第2个工资条中的所有“M5”改为“M5+1”(比如第2个工资条的I14单元应改为=VLOOKUP(M5+1,工资报表!A:R,2),其余类推),第3个工资条中改为“M5+2”,第4个工资条中改为“M5+3”。调整好页面设置使之适合A4页面,并在4个工资条之间设置三条单元格边框虚线以方便打印后切割。
2.设计打印控制界面
在L5、L7和L9中分别输入“当前序号”、“开始序号”和“结束序号”,留M5、M7和M9存放序号数值,右击工具栏选择“窗体”,弹出窗体工具栏,选择其中的“组合框”在N5单元格画一个组合框,右击此组合框选“设置控件格式”,在“控制”标签中设置“数据源区域”为“工资报表!$D$3:$D$20”(即工资报表中的“姓名”区域),“单元格链接”为“$M$5”。确定后把这个组合框复制两份分别放在N7和N9单元格里,并分别将其“单元格链接”改为“$M$7”和“$M$9”。再在“窗体”工具栏中选择“按钮”画一个矩形按钮放在L13:N14单元格区域中,将其文字改为“打印所选范围”(图3),右击此按钮,选择“指定宏”,在弹出窗口中点“新建”按钮,编辑如下代码(注释文字不用输入):
Sub按钮4_单击()
序号=Range("M7"
.Value
打印:
If序号<=Range("M9"
.ValueThen
Range("M5"
.Value=序号
IfRange("M9"
.Value-序号=0Then
Range("A1:J9"
.PrintOutCopies:=1
GoTo结束
EndIf
IfRange("M9"
.Value-序号=1Then
Range("A1:J21"
.PrintOutCopies:=1
GoTo结束
EndIf
IfRange("M9"
.Value-序号=2Then
Range("A1:J33"
.PrintOutCopies:=1
GoTo结束
EndIf
‘以上三段If条件语句的作用为当打印到所选序号范围的最后一页时,判断最后一页的工资条数目是否足4条,如果不足4条则只打印最后页所剩余的条数并结束整个循环。在原装耗材如此昂贵的年代,我们不得不“惜墨如金”啊
序号=序号+4
Range("A1:J45"
.PrintOutCopies:=1
GoTo打印
EndIf
‘如果序号小于等于M9则跳回"打印"循环点,否则中止循环.
结束:
EndSub
为能正常实现打印功能,应将宏的安全性设置一下,点“工具→宏→安全性”,建议将宏的安全性设置为“中”,以后打开此文件时选择“启用宏”即可。
3.美化界面
好了,所有的设计工作基本完毕,剩下就就是做一些美化工作,将除A1:J45区域以外的单元格的底纹设置为你所喜欢的颜色(比如天蓝色),将M5、M7、M9底纹设成比较醒目的黄色,点“工具→选项”,将“网格线”、“行列标号”和“零值”前的钩去掉。为防止财务MM的误操作修改所设计的内容,可点“工具→保护→保护工作表”将工作表保护起来。最后将此文件保存为一个模板(如“工资条.xlt”)以便以后调用。最后界面如图4所示。
现在只要在M7和M9中输入开始序号和结束序号(或在右边的姓名组合框中选择姓名),再点击打印的那个按钮就可一次满幅面批量打印出所选范围的员工工资条,最后一页记录如果不足4条并不会打印出多余的内容来。如果有时仅需要打印某一个员工的工资条,只要在开始序号和结束序号都输入该员工的序号(或在右边组合框都选择该员工姓名)即可只打印该员工工资条(同样不会打印多余内容),非常方便。在以后的月份中如果有数据变动,只需要改动“工资报表”中的数据,然后打到“打印”工作表中进行打印,即使有人事变动要在“工资报表”中增加或删除员工工资记录行,也不会影响“序号”和“工资条编号”的连续性。
来源:中国电脑报