李沫
乌鲁木齐市环境监测中心站 新疆 乌鲁木齐 830000
摘 要 污染源普查工作时常处理海量数据,若依靠纯手工处理工作量巨大,文章提出利用VBA技术开发设计程序,对乌鲁木齐市第二次全国污染源普查中各类报表的打印格式进行自动设置,实现所有报表中不同表单的批量打印,该程序能满足实际需求,大大提高了工作效率,节省了大量的人力和时间,使用、维护简便,可靠性高。
关键词 污染源普查;批量打印;设置
1应用背景
按照第二次全国污染源普查档案管理的要求,所有企业报表应打印存档,但每个企业包括几十余份报表,每张报表的内容范围不同,各个企业的相同报表也有差异,为了保证报表打印的数据清晰、内容完整,如使用常规方法需要对报表逐一进行设置、预览,反复调整。乌鲁木齐市工业企业数量有2500余家,表单数量近3-4万张,最后,每个企业也需要点击一次打印,而且由于人为因素的影响还会存在一定的漏表、漏企业的情况,后期再靠人工校对数据又要耗费大量的时间,极大地影响工程进度,会耗费更多的人力和时间成本。此时,借助Office自带的二次开发工具VBA将能很好地处理此类问题,批量设置表单格式、批量打印,不仅能提高效率节省时间,还能大大提高数据处理的正确率[1]。
2Excel VBA 简介
VBA( Visual Basic for Application) 是微软在Office 中内置的宏编程语言,是微软开发在其桌面应用程序中执行通用的自动化(OLE)任务的编程语言. 主要用来扩展Windows的应用程序功能,特别是Microsoft Office软件也可说是一种应用程式视觉化的Basic 脚本,VBA实质就是寄生于VB应用程序的版本,易学易用,功能却非常强大,可以操控各种Office对象,为用户文档增添强大的功能[2]。
3设计思路
为了保证打印效果符合档案资料的要求,需要结合报表的实际特点,全面考虑到打印中可能遇到的各类问题,最终实现多企业多表单的“一键打印”,程序设计内容如下:①可任意选取多个打印企业(数量不受限制),批量读取各个文件信息;②根据企业普查报表G101_1、G101_2、G101-3、G102、 G103-1等每一种类型的特点,调整打印范围,确保数据不分列、不错行,内容显示清晰,同时固定顶端标题行和左端标题行,有利于读取数据;③对每个企业、每张报表进行批量打印,做到不漏表,不漏企业,并标注页码,方便查询,最后自动生成已设置完毕企业文件[3]。
4关键代码
4.1 读取文件信息
调用命令Application.GetOpenFilename显示标准“打开”对话框,选择要打印的企业文件,并获取用户文件名,而不必真正打开任何文件,文件名称将自动记录,只是把文件名称返回程序,使用循环语句for将选择的文件名(包括文件路径)依次赋值给变量bcurrent,for each语句里面每个文件中的所有数据表,每个文件按顺序设置,实现多个文件多个表单的读取。
filetoopen = Application.GetOpenFilename(“excel files(*.xlsx),*.xlsx”, , “请选择要打印的企业!!”, , True)
If IsArray(filetoopen) = 0 Then
MsgBox “没有选择文件”
Exit Sub
End If
For i = 1 To UBound(filetoopen)
Workbooks.Open Filename:=filetoopen(i)
wbcurrent = ActiveWorkbook.Name
For Each owk In Worksheets
owk.Select
4.2 每张表单打印设置
因企业污染源表单类型较多,现选取数据量大、锅炉数变化大,情况较为复杂的G103-1表(锅炉表)为例进行解释说明。先选择指定数据表,并读取已填报数据的总列数,使用case命令,根据不同的列数,优化打印格式,调整参数FitToPagesWide 的数量,保证单元格字体大小合适自动设置打印为1页,打印方向设置为横向或纵向;为避免数据分列显示,取消合并单元格的设置;固定顶端标题行、左端标题列,方便对照查阅数据[4]。
If owk.Name = “T_BAS_G103_1” Then ‘选择表号
lie = ActiveSheet.UsedRange.Columns.Count,Select Case lie,Case Is < 200,Set myrange = Range(“$9:$93”), myrange.UnMerge,With owk.PageSetup,.Zoom = False,.FitToPagesWide = 1,.Orientation = xlPortrait,.FitToPagesTall = False,.PrintTitleColumns = “$b:$e”.PrintTitleRows = “$9:$9”, End With,
Case Is >100 。。。,Case Is > 50,Case Is > 20
4.3 打印输出
4.1-4.2程序已完成了目标企业中每一张表单的打印格式设置,为方便数据查阅,用each、seclect函数读取每张污染源表单的文件名称,汇总打印总页数,在每页底端页脚显示页码、表单名称、总页数,用于检查打印结果是否有漏表的情况;历遍每一家企业中的所有表单执行打印命令,如要求每个企业文档双面打印(应提前将打印机设置为双面打印),最后,将打印设置成功文件另存为以企业命名的新文件[5]。
For Each owk In Worksheets,owk.Select,With owk.PageSetup
.CenterFooter = owk.Name & “第&p页,共&n页”, End With, wk.SaveAs Filename:=ThisWorkbook.Path & “\” & Range(“c9”).Value & Range(“c6”).Value & i & “.xlsx”, ActiveWorkbook.Save,Application.ActiveSheet.PrintOut copies:=1,ith owk.PageSetup,Application.ActiveSheet.PrintOut copies:=1,MsgBox “报表打印完成!”
5结束语
Excel VBA技术已在乌鲁木齐市第二次全国污染源普查的工业源、农业源、移动源、集中式、生活源等各类源普查档案建立得到广泛的应用,并取得了良好的使用效果。在实际工作中,用户可根据不同情况具体分析,适当修改VBA代码,以适应不同的表单类型,达到快速打印的效果。运用vba技术进行数据的批量处理,解决了采用常规处理时大量繁杂重复的工作,极大地提高了工作自动化程度。
参考文献
[1] 焦萍萍,周显春.EXCEL 中的VBA 程序设计[J].电脑知识与技,2016,11(12):63-64.
[2] 李晓玫,杨小平.Excel 中的VBA 程序设计[J].四川师范大学学报(自然科学),2004(4):423-426.
[3] Excel,Home.Excel 2007 VBA實战技巧精粹[M].北京:人民邮电出版社,2013:73.
[4] 邓朝辉. 基于Excel VBA 的事业单位岗位设置评分系统的设计与实现[J]. 计算机与现代化,2012,206(12):213-215.
[5] 罗刚君.EXCELVBA程序开发自学宝典(第3版)[M].北京:电子工业出版社,2014:215.