总结分享:EXCEL宏实现多表格自动打印

分类: VBA |
之前有位朋友提出这样的问题:有一份名单和一张表格,怎样可以按名单逐一将表格打印出来。后来这位朋友用了WORD的邮件合并功能实现了。但恰好正在学习EXCEL的VBA,另外也因为EXCEL没有邮件合并功能,于是就想着用EXCEL
宏和VBA的方法去实现。
本文以一个例子,总结自己用EXCEL的宏及VBA功能实现的具体步骤。
假设现在某公司行政部需要将公司每个人的个人履历表逐一打印出来,供各位员工补充、确认签字并归档。现有一份模板表格,以及早期录入到EXCEL的个人基础信息。
(1)点击菜单栏的【开发工具】,在选项栏中点击【录制宏】新建宏并命名宏,点击确定开始录制;
(2)先以名单列表中的第一行记录,对应输入到模板列表的信息栏中;
(3)点击菜单栏的【页面布局】,设置打印区域、页边距等页面设置;
(4)点击“文件”——“打印”,选择打印机及设置打印机属性后,点击打印,完成打印第一份表格;
(5)返回【开发工具】栏,点击【停止录制】,结束宏录制。此时点击【查看代码】,在弹出的代码
编辑窗口中,可找到刚录制的宏的VBA代码。
(注1:如果菜单栏中无开发工具,可在“文件”——“选项”——“自定义功能区”中,在右侧“主选项卡”栏中勾选“开发工具”)
步骤2:修改VBA代码,实现按名单列表逐一打印表格。
由于步骤1中只将名单列表中的第一行记录填入表中并打印,如果需要将名单中所有员工的信息逐一打
印,则需要对宏的VBA代码进行简单的修改。
查看代码可以看到刚才录制的宏包含多行的VBA代码,其中有很多是关于页面设置的属性方法和参数,一般在第一次打印中页面设置已设置好参数并在之后打印中用相同的设置,因此相关的VBA代码可不做修改。我们需要关注的是步骤1中第(2)输入模板列表信息相关的代码。
Range("B2").Select '对应模板表格中“部门”填写栏(注2:开头带符号 ' 的
语句在VB中为解析语句,该部分只用作说明不被执行)
ActiveCell.FormulaR1C1 =
"=Sheet2!RC[-1]"
Range("D2").Select '对应模板表格中“姓名”填写栏
ActiveCell.FormulaR1C1 = "=Sheet2!RC[-2]"
Range("F2").Select '对应模板表格中“职位”填写栏
ActiveCell.FormulaR1C1 = "=Sheet2!RC[-3]"
Range("B3:C3").Select '对应模板表格中“学历”填写栏
ActiveCell.FormulaR1C1 = "=Sheet2!R[-1]C[2]"
(注3:R1C1是EXCEL中另外一种行列标识的方法。)
下面对VBA代码进行修改,实现按照名单逐一打印表格:
Sub 打印()
Dim finalrow as intger '定义一个整形变量存储名单列表中最后一行的行号
finalrow=Sheet2.cells(rows.count,range("A1").column).end(xlup).row
'求名单列表的最后一行所 在行 号。
For i=2 to finalrow
'由于在步骤1中已将名单首位打印,所以此处从第2位开始打印。
Range("B2").Select
ActiveCell.Formula = "=Sheet2!A"
& i '改EXCEL常规的行列标识方法,名单列表中部门字段存放 在 表2A列
Range("D2").Select
ActiveCell.Formula = "=Sheet2!B" & i
'名单列表中部门字段存放在表2B列
Range("F2").Select
ActiveCell.Formula
= "=Sheet2!C" & i
' 名单列表中部门字段存放在表2C列
Range("B3:C3").Select
ActiveCell.Formula
= "=Sheet2!D" & i
' 名单列表中部门字段存放在表2D列
.
.
.
(此处为页面设置相关的代码,此处省略)
.
.
.
Application.PrintCommunication = True
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True,
IgnorePrintAreas:=False
Next finalrow
End Sub
(注4:For....next
语句为循环语句,缺其中之一均无法运行,因此记得在代码最后加上Next finalrow))
到这里,我们就完成了宏代码的设计,下面就是运行这个宏代码,实现自动打印功能。
步骤3:运行宏,实现自动打印功能。
(1)在“文件”——“打印”中,选择好打印机以及设置好打印机属性;(实际上,步骤1中的宏不能记录到设置打印机及设置打印机属性的操作,为了确保打印机选择正确,此处再次进行设置打印机操作。)
(2)在“文件”——“选项”中,选择“自定义功能区”,在左侧“从下列位置选择命令”中下拉选 择
“宏”,并找到“打印”宏,在右侧点击“新建选项卡”,创建新的选项卡,然后“打印”宏添加到新建
选项卡中的“新建组”(需点击选中“新建组”),点击确定后,此时菜单栏会新增一个选项卡,打开后则 能找到“打印”宏按钮;
(3)点击“打印”宏按钮(或在代码编辑窗按F5或点击开始按钮直接运行),计算机则开始按照名单 , 自 动打印表格。
(注5:保存文件时会提示“无法保存VB项目”,是因为xlsx文档无法保存VBA代码,若想保存VBA代码下次再使用,则另存为xlsm格式,该格式可以保存VBA代码。)
到此则实现了表格按名单逐一打印的功能,以上是本人学习尝试总结出来的方法,EXCEL
VBA的好处之一就是,你不必很清楚所有的代码,只需要录制需要的功能的宏后就能得到相应功能的代码,然后稍微修改一下代码,则能满足使用需求。其中的方法或编写代码的方式有很多,有兴趣的可以以此为例再进行拓展,然后大家能共同交流。总结当中有错误或不足的地方,请各位多多指教。
前一篇:欢迎您在新浪博客安家