巧用VBA编程实现EXCEL电子表格的批量自动打印.docx
- 文档编号:25422633
- 上传时间:2023-06-08
- 格式:DOCX
- 页数:13
- 大小:385.44KB
巧用VBA编程实现EXCEL电子表格的批量自动打印.docx
《巧用VBA编程实现EXCEL电子表格的批量自动打印.docx》由会员分享,可在线阅读,更多相关《巧用VBA编程实现EXCEL电子表格的批量自动打印.docx(13页珍藏版)》请在冰豆网上搜索。
巧用VBA编程实现EXCEL电子表格的批量自动打印
巧用VBA编程实现EXCEL证件
的批量打印
夏教荣陈文涛
(湖南省邵阳县白仓镇中学421114)
摘要介绍了在EXCEL中如何使用VBA,通过实例论述了在EXCEL中可以通过VBA编程实现含有照片的电子证件或表格批量自动打印,提高了EXCEL在实际应用中的工作效率及节省人力资源。
关键词VBA编程自动打印EXCEL
一VBA简介
1、什么是VBA?
VBA是VisualBasicForApplication的缩写,它是以VisualBasic为发展基础的语言。
在Office软件中,VBA应用程序能够在Word、Access、Excel等之间进行交互式应用,加强了应用程序间的互动。
VBA是VB的应用程序版本,可以理解为“寄生在Office办公软件中的VB”,可以看作是VB语言的一个子集。
VBA使Office形成了独立的编程环境。
2、VBA与VisualBasic的关系
1)、VB用于开发Windows应用程序,其代码最终被编译为可执行程序。
而VBA是用于控制已有应用程序的自动化操作,其代码为解释。
2)、VB拥有独立的开发环境,而VBA必须集成在已有的应用程序中(Excel等)。
3)、VB开发出来的应用程序在脱离开发环境后仍能执行,而VBA编写出来的程序必须在访问集成应用程序(Excel等)的基础上进行。
尽管有以上不同,但它们仍然非常相似。
都使用相同的语言结构。
两者的程序的语法及程序流程完全一样。
二、在Excel中使用VBA
1、进入VBA的方法
下面以Office2010为例说明来进入VBA的方法:
功能区中有一个“开发工具”选项卡,在此可以访问VisualBasic编辑器和其他开发人员工具。
由于Office2010在默认情况下不显示“开发工具”选项卡,因此必须使用以下过程启用该选项卡:
1)、在“文件”选项卡上,选择“选项”打开“Excel选项”对话框。
2)、单击该对话框左侧的“自定义功能区”。
3)、在该对话框左侧的“从下列位置选择命令”下,选择“常用命令”。
4)、在该对话框右侧的“自定义功能区”下,选择“主选项卡”,然后选中“开发工具”复选框。
5)、单击“确定”。
在Excel显示“开发工具”选项卡之后,注意选项卡上“VisualBasic”、“宏”和“宏安全性”按钮的位置。
图1.Excel2010中的“开发工具”选项卡
启用“开发工具”选项卡后,可以轻松找到“VisualBasic”和“宏”按钮。
2、安全问题
单击“宏安全性”按钮可以指定哪些宏可以运行并需满足哪些条件。
尽管未授权宏代码可能会严重损害计算机,但阻止您运行有帮助的宏的安全条件会严重妨碍您的工作效率。
宏安全性是一个复杂而又涉及广泛的话题,您应研究并了解是否应使用Excel宏。
在本文中,请注意,如果当您打开一个包含宏的工作簿时,在功能区和工作表之间出现“安全警告:
宏已被禁用”条,则可单击“启用内容”按钮来启用宏。
此外,作为一种安全措施,您不能以默认的Excel文件格式(.xlsx)保存宏;而必须将宏保存在具有一个特殊扩展名.xlsm的文件中。
三、用VBA制作证件批量打印的实例
下面通过制作一张学员培训券来说明VBA在Excel中如何实现自动批量打印多张含有照片的培训券。
1、准备工作
1)、设计建立基本人员信息表
在Excel表格中建立如下图2基本信息资料,具体建立过程在这里不再详述,
我建立的表比较多,实际这里要用到的表格只有两张,所以其他的表格我就没有必要说了。
图2学员基本信息表(学员花名册(计算机操作员)
2)、设计建立打印证件或报表格式见图3
图3培训券格式及内容
2、使用VBA编程实现两个工作表链接打印操作
1)、两张表格设置完成后,回到培训券(计算机操作员)工作表即sheet7,点击开发工具标签栏——>Visualbasic
(或按ALT+F11快捷键),双击你所要打印证件的工作项目,即可进入VBA编程状态输入代码。
如图4所示
图4代码窗口
全部代码如下:
'宏
'功能:
把光标处的人员信息填充到"培训券(计算机操作员)"工作表,并培训券(计算机操作员)
'用法:
1.把光标定位到需要培训券(计算机操作员)的人员行的单元格
'2.执行本宏。
SubsubSetPringInfo()
OnErrorResumeNext
DimoCell1,oCell2,'定义二变量
Dimcfz2,cfz3,cfz4,cfz5,cfz6,cfz7,cfz8,cfz9
Dimcfz10,cfz11,cfz12,cfz13,cfz14,cfz15,cfz16,cfz17,cfz18
'定义身份证取第二位数的内存变量为cfz2,'取第三位数的内存变量为cfz3,……以此类推到第十八位身份证内存变量为cfz18.(身份证取第一位的内存变量为oCell2,不需要重新定义)
DimFileTypeAsString
DimiPXJHAsLong'编号
DimiRowAsLong'正在培训券(计算机操作员)人员的行号
DimstrSheetAsString'人员信息的工作表名称
strSheet="学员花名册(计算机操作员)"
'人员基本信息在学员花名册(计算机操作员)工作表中,此处可以修改
'检查是否在人员基本信息工作表中执行此功能,如果是,则显示不能在此工作表中执行。
IfActiveSheet.Name<>strSheetThen
'不是在人员信息工作表中则弹出对话框。
MsgBox"请在人员基本信息工作表中执行此功能"
ExitSub
EndIf
Do'循环开始
iRow=Selection.Row'行号,从当前选定的行开始培训券(计算机操作员)
'读当前培训券(计算机操作员)行的左边第一单元格内容:
序号
SetoCell1=Worksheets(strSheet).Cells(iRow,11)
'序号是数字的行需要培训券(计算机操作员)即所对应培训券号行所在的单元格
iPXJH=Val(oCell1.Value)'培训券号
IfiPXJH>=10070893Then
'在培训券号内的数字
SetoCell2=Worksheets("培训券(计算机操作员)").Cells(5,8)
oCell2.Value=iPXJH
'姓名
SetoCell1=Worksheets(strSheet).Cells(iRow,2)
SetoCell2=Worksheets("培训券(计算机操作员)").Cells(6,8)
oCell2.Value=oCell1.Value
'插入图片
FileType=InputBox("输入你的图片的后缀名","输入图片格式","jpg")
Numb=oCell2.Value
Sheet7.Select'改变当前的工作表为sheet7即培训券(计算机操作员)
WithActiveSheet
.Pictures.Insert("D:
\pic\"&Numb&"."&FileType).Select
'图片所在的路径为:
D:
\pic\,此路径可以根据具体情况更改
SetTarget=Worksheets("培训券(计算机操作员)").Cells(5,23)
'将图片插入到指定的单元格中,我设置的单元格为W5单元格,可以更
'改为自己所需的单元格位置
EndWith
WithSelection
.Top=Cells(5,23).Top+4'插入图片的上方位置为W5的位置向下4
'个单位,数字4可以更改
.Left=Cells(5,23).Left+5'插入图片的上方位置为W5的位置向下
'4个单位,数字4可以更改
.Width=Cells(5,23).Width+110'插入图片的宽度为W5单元格的宽
'度加110个单位的宽度为图片的整个宽度,110可以更改
.Height=Cells(5,23).Height+110'插入图片的高度为W5单元格的高
'度加110个单位的高度为图片的整个高度,110可以更改
EndWith
'户籍
SetoCell1=Worksheets(strSheet).Cells(iRow,9)
SetoCell2=Worksheets("培训券(计算机操作员)").Cells(7,6)
oCell2.Value=oCell1.Value
'身份证号
SetoCell1=Worksheets(strSheet).Cells(iRow,8)
SetoCell2=Worksheets("培训券(计算机操作员)").Cells(9,3)
'指定身份证第一位数字所在的位置,以下类推。
Setcfz2=Worksheets("培训券(计算机操作员)").Cells(9,4)
Setcfz3=Worksheets("培训券(计算机操作员)").Cells(9,5)
Setcfz4=Worksheets("培训券(计算机操作员)").Cells(9,6)
Setcfz5=Worksheets("培训券(计算机操作员)").Cells(9,7)
Setcfz6=Worksheets("培训券(计算机操作员)").Cells(9,8)
Setcfz7=Worksheets("培训券(计算机操作员)").Cells(9,9)
Setcfz8=Worksheets("培训券(计算机操作员)").Cells(9,10)
Setcfz9=Worksheets("培训券(计算机操作员)").Cells(9,11)
Setcfz10=Worksheets("培训券(计算机操作员)").Cells(9,12)
Setcfz11=Worksheets("培训券(计算机操作员)").Cells(9,13)
Setcfz12=Worksheets("培训券(计算机操作员)").Cells(9,14)
Setcfz13=Worksheets("培训券(计算机操作员)").Cells(9,15)
Setcfz14=Worksheets("培训券(计算机操作员)").Cells(9,16)
Setcfz15=Worksheets("培训券(计算机操作员)").Cells(9,17)
Setcfz16=Worksheets("培训券(计算机操作员)").Cells(9,18)
Setcfz17=Worksheets("培训券(计算机操作员)").Cells(9,19)
Setcfz18=Worksheets("培训券(计算机操作员)").Cells(9,20)
oCell2.Value=Mid((oCell1.Value),1,1)
'给身份证第一位数字赋具体的值,以此类推。
cfz2.Value=Mid((oCell1.Value),2,1)
cfz3.Value=Mid((oCell1.Value),3,1)
cfz4.Value=Mid((oCell1.Value),4,1)
cfz5.Value=Mid((oCell1.Value),5,1)
cfz6.Value=Mid((oCell1.Value),6,1)
cfz7.Value=Mid((oCell1.Value),7,1)
cfz8.Value=Mid((oCell1.Value),8,1)
cfz9.Value=Mid((oCell1.Value),9,1)
cfz10.Value=Mid((oCell1.Value),10,1)
cfz11.Value=Mid((oCell1.Value),11,1)
cfz12.Value=Mid((oCell1.Value),12,1)
cfz13.Value=Mid((oCell1.Value),13,1)
cfz14.Value=Mid((oCell1.Value),14,1)
cfz15.Value=Mid((oCell1.Value),15,1)
cfz16.Value=Mid((oCell1.Value),16,1)
cfz17.Value=Mid((oCell1.Value),17,1)
cfz18.Value=Mid((oCell1.Value),18,1)
'工种
SetoCell1=Worksheets(strSheet).Cells(iRow,7)
SetoCell2=Worksheets("培训券(计算机操作员)").Cells(11,11)
oCell2.Value=oCell1.Value
'培训券(计算机操作员)证件,"A1:
E7"为定义页面的培训券(计算机操作员)范围
Worksheets("培训券(计算机操作员)").Range("A1:
AF25").PrintOut
'清空sheet7中相片单元格中的照片为了避免照片打印重复
DimxAsInteger
Forx=1ToSheet7.Shapes.Count
IfSheet7.Shapes(x).TopLeftCell.Address="$W$5"Then
'绝对引用单元格W5是我设置的相片所在的单元格
Sheet7.Shapes(x).Delete'删除图片单元格的内容
EndIf
Nextx
Sheet1.Activate'激活当前的工作表为sheet1即学员花名册(计算机操作员)
'打完一个证件后,询问是否培训券(计算机操作员)下一个。
IfMsgBox("继续打印下一人员?
",vbDefaultButton1+vbYesNo)<>vbYesThen
'中断培训券(计算机操作员)打印
ExitSub
EndIf
'为培训券(计算机操作员)下一人员做准备
SetoCell1=Worksheets(strSheet).Cells(iRow+1,1)
oCell1.Activate
Sheet1.Select'恢复当前的工作表为sheet1即学员花名册(计算机操作员)
Else
MsgBox"当前行不是人员信息,不能打印"
ExitSub
EndIf
Loop
EndSub
2)、实验结果
完成后按ALT+F11进入代码窗口,鼠标点击
(或按F5)执行宏操作会弹出宏对话框,如图5所示
点击“运行”按钮。
注意:
在运行前要选择工作表学员花名册(计算机操作员)即sheet1,并且选择A4单元格即序号为1的单元格,不然会出现提示:
“请在人员基本信息工作表中执行此功能”,还要注意的是:
在“培训券(计算机操作员)”工作表中,显示比例改必须为100%,否则,打印出来的图片不会在图片框中。
这样我们可以按照要求打印自己所要打印的证件了。
手工几天的工作不到半天就完成了,提高了工作效率,同时也减少了很多的错误。
此代码在WindowsXP操作系统、MicrosoftOfficeExcel2010下编写,并顺利运行通过。
四、结束语
在Excel制作电子表格过程中,充分利用VBA这一工具,提升Excel文件的技术含量,可使电子表格自动化功能得到增强,使电子表格更完善,更具有灵活多样性。
执行打印后的效果为下图6所示
图6执行代码后打印的效果图
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 巧用 VBA 编程 实现 EXCEL 电子表格 批量 自动 打印
![提示](https://static.bdocx.com/images/bang_tan.gif)