李沫
烏魯木齊市環(huán)境監(jiān)測(cè)中心站 新疆 烏魯木齊 830000
摘 要 污染源普查工作時(shí)常處理海量數(shù)據(jù),若依靠純手工處理工作量巨大,文章提出利用VBA技術(shù)開(kāi)發(fā)設(shè)計(jì)程序,對(duì)烏魯木齊市第二次全國(guó)污染源普查中各類(lèi)報(bào)表的打印格式進(jìn)行自動(dòng)設(shè)置,實(shí)現(xiàn)所有報(bào)表中不同表單的批量打印,該程序能滿足實(shí)際需求,大大提高了工作效率,節(jié)省了大量的人力和時(shí)間,使用、維護(hù)簡(jiǎn)便,可靠性高。
關(guān)鍵詞 污染源普查;批量打印;設(shè)置
1應(yīng)用背景
按照第二次全國(guó)污染源普查檔案管理的要求,所有企業(yè)報(bào)表應(yīng)打印存檔,但每個(gè)企業(yè)包括幾十余份報(bào)表,每張報(bào)表的內(nèi)容范圍不同,各個(gè)企業(yè)的相同報(bào)表也有差異,為了保證報(bào)表打印的數(shù)據(jù)清晰、內(nèi)容完整,如使用常規(guī)方法需要對(duì)報(bào)表逐一進(jìn)行設(shè)置、預(yù)覽,反復(fù)調(diào)整。烏魯木齊市工業(yè)企業(yè)數(shù)量有2500余家,表單數(shù)量近3-4萬(wàn)張,最后,每個(gè)企業(yè)也需要點(diǎn)擊一次打印,而且由于人為因素的影響還會(huì)存在一定的漏表、漏企業(yè)的情況,后期再靠人工校對(duì)數(shù)據(jù)又要耗費(fèi)大量的時(shí)間,極大地影響工程進(jìn)度,會(huì)耗費(fèi)更多的人力和時(shí)間成本。此時(shí),借助Office自帶的二次開(kāi)發(fā)工具VBA將能很好地處理此類(lèi)問(wèn)題,批量設(shè)置表單格式、批量打印,不僅能提高效率節(jié)省時(shí)間,還能大大提高數(shù)據(jù)處理的正確率[1]。
2Excel VBA 簡(jiǎn)介
VBA( Visual Basic for Application) 是微軟在Office 中內(nèi)置的宏編程語(yǔ)言,是微軟開(kāi)發(fā)在其桌面應(yīng)用程序中執(zhí)行通用的自動(dòng)化(OLE)任務(wù)的編程語(yǔ)言. 主要用來(lái)擴(kuò)展Windows的應(yīng)用程序功能,特別是Microsoft Office軟件也可說(shuō)是一種應(yīng)用程式視覺(jué)化的Basic 腳本,VBA實(shí)質(zhì)就是寄生于VB應(yīng)用程序的版本,易學(xué)易用,功能卻非常強(qiáng)大,可以操控各種Office對(duì)象,為用戶文檔增添強(qiáng)大的功能[2]。
3設(shè)計(jì)思路
為了保證打印效果符合檔案資料的要求,需要結(jié)合報(bào)表的實(shí)際特點(diǎn),全面考慮到打印中可能遇到的各類(lèi)問(wèn)題,最終實(shí)現(xiàn)多企業(yè)多表單的“一鍵打印”,程序設(shè)計(jì)內(nèi)容如下:①可任意選取多個(gè)打印企業(yè)(數(shù)量不受限制),批量讀取各個(gè)文件信息;②根據(jù)企業(yè)普查報(bào)表G101_1、G101_2、G101-3、G102、 G103-1等每一種類(lèi)型的特點(diǎn),調(diào)整打印范圍,確保數(shù)據(jù)不分列、不錯(cuò)行,內(nèi)容顯示清晰,同時(shí)固定頂端標(biāo)題行和左端標(biāo)題行,有利于讀取數(shù)據(jù);③對(duì)每個(gè)企業(yè)、每張報(bào)表進(jìn)行批量打印,做到不漏表,不漏企業(yè),并標(biāo)注頁(yè)碼,方便查詢,最后自動(dòng)生成已設(shè)置完畢企業(yè)文件[3]。
4關(guān)鍵代碼
4.1 讀取文件信息
調(diào)用命令A(yù)pplication.GetOpenFilename顯示標(biāo)準(zhǔn)“打開(kāi)”對(duì)話框,選擇要打印的企業(yè)文件,并獲取用戶文件名,而不必真正打開(kāi)任何文件,文件名稱將自動(dòng)記錄,只是把文件名稱返回程序,使用循環(huán)語(yǔ)句for將選擇的文件名(包括文件路徑)依次賦值給變量bcurrent,for each語(yǔ)句里面每個(gè)文件中的所有數(shù)據(jù)表,每個(gè)文件按順序設(shè)置,實(shí)現(xiàn)多個(gè)文件多個(gè)表單的讀取。
filetoopen = Application.GetOpenFilename(“excel files(*.xlsx),*.xlsx”, , “請(qǐng)選擇要打印的企業(yè)!!”, , True)
If IsArray(filetoopen) = 0 Then
MsgBox “沒(méi)有選擇文件”
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 每張表單打印設(shè)置
因企業(yè)污染源表單類(lèi)型較多,現(xiàn)選取數(shù)據(jù)量大、鍋爐數(shù)變化大,情況較為復(fù)雜的G103-1表(鍋爐表)為例進(jìn)行解釋說(shuō)明。先選擇指定數(shù)據(jù)表,并讀取已填報(bào)數(shù)據(jù)的總列數(shù),使用case命令,根據(jù)不同的列數(shù),優(yōu)化打印格式,調(diào)整參數(shù)FitToPagesWide 的數(shù)量,保證單元格字體大小合適自動(dòng)設(shè)置打印為1頁(yè),打印方向設(shè)置為橫向或縱向;為避免數(shù)據(jù)分列顯示,取消合并單元格的設(shè)置;固定頂端標(biāo)題行、左端標(biāo)題列,方便對(duì)照查閱數(shù)據(jù)[4]。
If owk.Name = “T_BAS_G103_1” Then ‘選擇表號(hào)
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程序已完成了目標(biāo)企業(yè)中每一張表單的打印格式設(shè)置,為方便數(shù)據(jù)查閱,用each、seclect函數(shù)讀取每張污染源表單的文件名稱,匯總打印總頁(yè)數(shù),在每頁(yè)底端頁(yè)腳顯示頁(yè)碼、表單名稱、總頁(yè)數(shù),用于檢查打印結(jié)果是否有漏表的情況;歷遍每一家企業(yè)中的所有表單執(zhí)行打印命令,如要求每個(gè)企業(yè)文檔雙面打印(應(yīng)提前將打印機(jī)設(shè)置為雙面打?。詈?,將打印設(shè)置成功文件另存為以企業(yè)命名的新文件[5]。
For Each owk In Worksheets,owk.Select,With owk.PageSetup
.CenterFooter = owk.Name & “第&p頁(yè),共&n頁(yè)”, 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 “報(bào)表打印完成!”
5結(jié)束語(yǔ)
Excel VBA技術(shù)已在烏魯木齊市第二次全國(guó)污染源普查的工業(yè)源、農(nóng)業(yè)源、移動(dòng)源、集中式、生活源等各類(lèi)源普查檔案建立得到廣泛的應(yīng)用,并取得了良好的使用效果。在實(shí)際工作中,用戶可根據(jù)不同情況具體分析,適當(dāng)修改VBA代碼,以適應(yīng)不同的表單類(lèi)型,達(dá)到快速打印的效果。運(yùn)用vba技術(shù)進(jìn)行數(shù)據(jù)的批量處理,解決了采用常規(guī)處理時(shí)大量繁雜重復(fù)的工作,極大地提高了工作自動(dòng)化程度。
參考文獻(xiàn)
[1] 焦萍萍,周顯春.EXCEL 中的VBA 程序設(shè)計(jì)[J].電腦知識(shí)與技,2016,11(12):63-64.
[2] 李曉玫,楊小平.Excel 中的VBA 程序設(shè)計(jì)[J].四川師范大學(xué)學(xué)報(bào)(自然科學(xué)),2004(4):423-426.
[3] Excel,Home.Excel 2007 VBA實(shí)戰(zhàn)技巧精粹[M].北京:人民郵電出版社,2013:73.
[4] 鄧朝輝. 基于Excel VBA 的事業(yè)單位崗位設(shè)置評(píng)分系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J]. 計(jì)算機(jī)與現(xiàn)代化,2012,206(12):213-215.
[5] 羅剛君.EXCELVBA程序開(kāi)發(fā)自學(xué)寶典(第3版)[M].北京:電子工業(yè)出版社,2014:215.