办公仔天地(44):批量打印照片式员工卡

软件世界

  办公仔的话:最近一位朋友打来电话,说他们公司老总要求打印一批员工识别卡,而且是连照片一起打印。让俺赶快给他想个办法。没办法,只有亲自出马拉这位兄弟一把了。

  打印思路

  本来准备通过Word的邮件合并进行员工卡的批量打印。但是朋友要求在员工卡中加入照片,要知道Word的邮件合并功能无法处理图片。最后发现在Excel中可以实现带照片员工卡的批量打印,在Excel中每个员工卡以单元格的形式出现,照片则以插入形式进行打印。

  一、建立数据记录

  首先需要建立一个如图1所示的“员工记录”工作表,设计好表格并输入全部员工资料。留出C列准备用于保存照片。

  小贴士:在A2输入=ROW()-1并双击A2的填充柄,就可以将公式复制到下面各单元格以自动生成序号。

  使用菜单中的插入功能大量插入照片比较麻烦,所以要先加入剪贴画库,再从剪贴画中调用。

  在Excel中打开“插入→图片→剪贴画→管理剪辑”,运行剪辑管理器,右击“我的收藏集”选择“新建收藏集”新建一个“照片”收藏集。

  选中“照片”收藏集,打开“文件→将剪辑添加到管理器”,打开存放照片的目录,按“Ctrl+A”组合键全部选中,单击“添加”按钮全部加入。

  二、照片设置

  选中“我的收藏集→照片”,在“结果类型”框中选中“所有媒体类型”,点击“搜索”按钮把刚添加的照片全部显示出来。

  选中C2单元格,从剪贴画中选择相应的照片单击插入,然后选中C列所有准备放照片的单元格,拖动调整大小使这些单元格正好与插入的照片一致。接下来只要逐一选中单元格,从剪辑库的收藏夹中选择相应照片单击插入,即可轻松地把照片准确放在相应单元格中(图2)。

  待照片全部插入后,再选中全部照片右击选择“设置图片格式”,在属性标签下选中“大小、位置随单元格而变”,这样以后要一起调整尺寸时只要改变单元格就可以了。

  三、设计员工识别卡

  在输入员工数据和插入图片之后,我们就需要开始设计员工卡界面,调用刚才的数据和照片。另外,为了方便人事部门查阅,可以设置一下员工卡的查询。

  1.打造界面

  新建一个工作表命名为“识别卡”,设置卡的格式(图3),在图中设置了保存打印范围的D10、D11单元格,并用“自选图形→基本形状”画了一个按钮输入文字“打印”。

  2.数据和照片调用

  在E3单元格中输入公式=VLOOKUP(D10,员工记录!A:H,2),按E6的编号在员工记录表A:H区域的首列中查找并返回所在行第2列(B列)的姓名。在C3、E4、E5、E6单元格分别输入公式=VLOOKUP(D10,员工记录!A:H,3)、=VLOOKUP(D10,员工记录!A:H,4)、=VLOOKUP(D10,员工记录!A:H,5)、=VLOOKUP(D10,员工记录!A:H,6)。

  打开“插入→名称→定义”,在名称中输入X,在引用位置中则输入公式=INDIRECT(“员工记录!C”&识别卡!$C$3),单击“添加”按钮定义一个名称X(图4)。

  从剪贴画中随便插入一张图,选中这张图,在编辑栏中输入公式=X,回车确定后马上可以看到图片变成了员工记录表中的相应照片,拖到要放照片的C3单元格位置(图5),此时可适当调整大小,不过要注意保持原图比例。在此决定显示数据的是D10中的序号。

  3.设置查询

  右击工具栏选择“窗体”,用“窗体”工具栏中的“组合框”画一个组合框,右击这个组合框选择“设置控件格式”,在“控制”选项卡下设置为$D$10,设置“数据源区域”为“员工记录”工作表中的姓名区域(员工记录!$B$2:$B$400),确定后把它拖动到D10旁边。按住Ctrl键拖动复制出另一个组合框,右击从“设置控件格式/控制”中把“数据源区域”改为“(员工记录!$E$2:$E$400)”即部门区域。

  为了便于查询,对员工记录表中的数据应以部门为第一关键字、姓名为第二关键字进行排序。

  这样我们可以通过单击,从下拉列表中选择。假设要查找工程部的张三,则先单击部门组合框选择第一个工程部,再单击姓名组合框光标已定位到工程部的第一个人名,你只要往下找到张三即可。

  四、设置批量打印

  现在就是最重要的一步了,进行员工卡的批量打印。按前面的设置一次只能打印一张,而员工卡这种东西当然是需要大批量打印的,所以必须进行其他设置。

  选中上面的两个组合框复制,分别在E12、E13单元格粘贴出两份。逐一选中从编辑栏中把=$D$10改为相应的=$D$12、=$D$13即可(图6)。

  右击前面画的“打印”按钮,选择指定宏,在指定宏窗口中单击“新建”按钮,在弹出的Microsoft Visual Basic编辑窗口编辑如下代码:

  Sub 自选图形1_单击()

  序号 = Range(“D12”).Value

  '序号等于D12

  打印:

  Range(“D10”).Value = 序号

  Range(“B2:F7”).PrintOut Copies:=1

  '打印B2:F7区域

  If 序号 < Range(“D13”).Value Then

  序号 = 序号 + 1

  GoTo 打印

  End If

  '如序号小于D13则加1后跳到循环点打印,否则终止

  End Sub

  OK,现在大功告成,你只要在D12、D13输入要打印的开始、结束序号,然后单击我们画的“打印”按钮就可以把指定范围的所有人员卡一次打印出来。也可以从D12、D13后的组合框中分别选中工程部的第一项和最后一项来批量打印出工程部全部人员。虽然在此我们只是用来打印员工卡,但实际上这方法完全可以用来实现带照片、证件的人员资料管理查询。

  小贴士:在“员工记录”工作表中最好不要设置边框,否则照片会多出一个黑框。如果觉得行高太大不好看,可在所有设置完成后调整。