巧用VBA編程實(shí)現(xiàn)EXCEL電子表格的批量自動(dòng)打印
《巧用VBA編程實(shí)現(xiàn)EXCEL電子表格的批量自動(dòng)打印》由會(huì)員分享,可在線閱讀,更多相關(guān)《巧用VBA編程實(shí)現(xiàn)EXCEL電子表格的批量自動(dòng)打印(12頁珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
1、巧用VBA編程實(shí)現(xiàn)EXCEL證件 的批量打印 夏教榮 陳文濤 (湖南省邵陽縣白倉鎮(zhèn)中學(xué) 421114) 摘要 介紹了在EXCEL中如何使用VBA,通過實(shí)例論述了在EXCEL中可以通過VBA編程實(shí)現(xiàn)含有照片的電子證件或表格批量自動(dòng)打印,提高了EXCEL在實(shí)際應(yīng)用中的工作效率及節(jié)省人力資源。 關(guān)鍵詞 VBA編程 自動(dòng)打印 EXCEL 一VBA簡介 1、什么是VBA? ? ?? ?VBA是Visual Basic For Application的縮寫,它是以Visual Basic為發(fā)展基礎(chǔ)的語言。在Office軟件中,VBA應(yīng)用程序能夠在Word、Access、Exce
2、l等之間進(jìn)行交互式應(yīng)用,加強(qiáng)了應(yīng)用程序間的互動(dòng)。 ? ?? ?VBA是VB的應(yīng)用程序版本,可以理解為“寄生在Office辦公軟件中的VB”,可以看作是VB語言的一個(gè)子集。 ? ?? ?VBA使Office形成了獨(dú)立的編程環(huán)境。 ?2、VBA與Visual Basic的關(guān)系 ? ?? ?1)、VB用于開發(fā)Windows應(yīng)用程序,其代碼最終被編譯為可執(zhí)行程序。而VBA是用于控制已有應(yīng)用程序的自動(dòng)化操作,其代碼為解釋。 ? ?? ?2)、VB擁有獨(dú)立的開發(fā)環(huán)境,而VBA必須集成在已有的應(yīng)用程序中(Excel等)。 ? ?? ?3)、VB開發(fā)出來的應(yīng)用程序在脫離開發(fā)環(huán)境后仍能執(zhí)行,而VBA
3、編寫出來的程序必須在訪問集成應(yīng)用程序(Excel等)的基礎(chǔ)上進(jìn)行。 ? ?? ?盡管有以上不同,但它們?nèi)匀环浅O嗨?。都使用相同的語言結(jié)構(gòu)。兩者的程序的語法及程序流程完全一樣。 二、在Excel中使用VBA 1、進(jìn)入VBA的方法 下面以O(shè)ffice2010為例說明來進(jìn)入VBA的方法: 功能區(qū)中有一個(gè)“開發(fā)工具”選項(xiàng)卡,在此可以訪問 Visual Basic 編輯器和其他開發(fā)人員工具。由于 Office 2010 在默認(rèn)情況下不顯示“開發(fā)工具”選項(xiàng)卡,因此必須使用以下過程啟用該選項(xiàng)卡: 1) 、在“文件”選項(xiàng)卡上,選擇“選項(xiàng)”打開“Excel 選項(xiàng)”對(duì)話框。 2) 、單擊該對(duì)話框
4、左側(cè)的“自定義功能區(qū)”。 3) 、在該對(duì)話框左側(cè)的“從下列位置選擇命令”下,選擇“常用命令”。 4)、在該對(duì)話框右側(cè)的“自定義功能區(qū)”下,選擇“主選項(xiàng)卡”,然后選中“開發(fā)工具”復(fù)選框。 5) 、單擊“確定”。 在 Excel 顯示“開發(fā)工具”選項(xiàng)卡之后,注意選項(xiàng)卡上“Visual Basic”、“宏”和“宏安全性”按鈕的位置。 圖 1. Excel 2010 中的“開發(fā)工具”選項(xiàng)卡 啟用“開發(fā)工具”選項(xiàng)卡后,可以輕松找到“Visual Basic”和“宏”按鈕。 2、安全問題 單擊“宏安全性”按鈕可以指定哪些宏可以運(yùn)行并需滿足哪些條件。盡管未授權(quán)宏代碼可能會(huì)嚴(yán)重?fù)p害
5、計(jì)算機(jī),但阻止您運(yùn)行有幫助的宏的安全條件會(huì)嚴(yán)重妨礙您的工作效率。宏安全性是一個(gè)復(fù)雜而又涉及廣泛的話題,您應(yīng)研究并了解是否應(yīng)使用 Excel 宏。 在本文中,請(qǐng)注意,如果當(dāng)您打開一個(gè)包含宏的工作簿時(shí),在功能區(qū)和工作表之間出現(xiàn)“安全警告: 宏已被禁用”條,則可單擊“啟用內(nèi)容”按鈕來啟用宏。 此外,作為一種安全措施,您不能以默認(rèn)的 Excel 文件格式 (.xlsx) 保存宏;而必須將宏保存在具有一個(gè)特殊擴(kuò)展名 .xlsm 的文件中。 三、用VBA制作證件批量打印的實(shí)例 下面通過制作一張學(xué)員培訓(xùn)券來說明VBA在Excel中如何實(shí)現(xiàn)自動(dòng)批量打印多張含有照片的培訓(xùn)券。 1、準(zhǔn)備工作 1)
6、、設(shè)計(jì)建立基本人員信息表 在Excel表格中建立如下圖2基本信息資料,具體建立過程在這里不再詳述, 我建立的表比較多,實(shí)際這里要用到的表格只有兩張,所以其他的表格我就沒有必要說了。 圖2學(xué)員基本信息表(學(xué)員花名冊(cè)(計(jì)算機(jī)操作員) 2)、設(shè)計(jì)建立打印證件或報(bào)表格式見圖3 圖3培訓(xùn)券格式及內(nèi)容 2、使用VBA編程實(shí)現(xiàn)兩個(gè)工作表鏈接打印操作 1) 、兩張表格設(shè)置完成后,回到培訓(xùn)券(計(jì)算機(jī)操作員)工作表即sheet7,點(diǎn)擊開發(fā)工具標(biāo)簽欄——>Visual basic,(或按ALT+F11快捷鍵),雙擊你所要打印證件的工作項(xiàng)目,即可進(jìn)入VBA
7、編程狀態(tài)輸入代碼。如圖4所示 圖4代碼窗口 全部代碼如下: '宏 '功能:把光標(biāo)處的人員信息填充到"培訓(xùn)券(計(jì)算機(jī)操作員)"工作表,并培訓(xùn)券(計(jì)算機(jī)操作員) '用法:1.把光標(biāo)定位到需要培訓(xùn)券(計(jì)算機(jī)操作員)的人員行的單元格 ' 2.執(zhí)行本宏。 Sub subSetPringInfo() On Error Resume Next Dim oCell1, oCell2, '定義二變量 Dim cfz2, cfz3, cfz4, cfz5, cfz6, cfz7, cfz8, cfz9 Dim cfz10, cfz11, cfz12, cfz13, cfz14
8、, cfz15, cfz16, cfz17, cfz18 '定義身份證取第二位數(shù)的內(nèi)存變量為cfz2,'取第三位數(shù)的內(nèi)存變量為cfz3,……以此類推到第十八位身份證內(nèi)存變量為cfz18.(身份證取第一位的內(nèi)存變量為oCell2,不需要重新定義) Dim FileType As String Dim iPXJH As Long '編號(hào) Dim iRow As Long '正在培訓(xùn)券(計(jì)算機(jī)操作員)人員的行號(hào) Dim strSheet As String '人員信息的工作表名稱 strSheet = "學(xué)員花名冊(cè)(計(jì)
9、算機(jī)操作員)" '人員基本信息在學(xué)員花名冊(cè)(計(jì)算機(jī)操作員)工作表中,此處可以修改 '檢查是否在人員基本信息工作表中執(zhí)行此功能,如果是,則顯示不能在此工作表中執(zhí)行。 If ActiveSheet.Name <> strSheet Then '不是在人員信息工作表中則彈出對(duì)話框。 MsgBox "請(qǐng)?jiān)谌藛T基本信息工作表中執(zhí)行此功能" Exit Sub End If Do '循環(huán)開始 iRow = Selection.Row '行號(hào),從當(dāng)前選定的
10、行開始培訓(xùn)券(計(jì)算機(jī)操作員) '讀當(dāng)前培訓(xùn)券(計(jì)算機(jī)操作員)行的左邊第一單元格內(nèi)容 :序號(hào) Set oCell1 = Worksheets(strSheet).Cells(iRow, 11) '序號(hào)是數(shù)字的行需要培訓(xùn)券(計(jì)算機(jī)操作員)即所對(duì)應(yīng)培訓(xùn)券號(hào)行所在的單元格 iPXJH = Val(oCell1.Value) '培訓(xùn)券號(hào) If iPXJH >= 10070893 Then '在培訓(xùn)券號(hào)內(nèi)的數(shù)字 Set oCell2 = Worksheets("
11、培訓(xùn)券(計(jì)算機(jī)操作員)").Cells(5, 8) oCell2.Value = iPXJH '姓名 Set oCell1 = Worksheets(strSheet).Cells(iRow, 2) Set oCell2 = Worksheets("培訓(xùn)券(計(jì)算機(jī)操作員)").Cells(6, 8) oCell2.Value = oCell1.Value '插入圖片 FileType = InputBox("輸入你
12、的圖片的后綴名", "輸入圖片格式", "jpg") Numb = oCell2.Value Sheet7.Select '改變當(dāng)前的工作表為sheet7即培訓(xùn)券(計(jì)算機(jī)操作員) With ActiveSheet .Pictures.Insert("D:\pic\" & Numb & "." & FileType).Select '圖片所在的路徑為:D:\pic\,此路徑可以根據(jù)具體情況更改 Set Target = Worksheets
13、("培訓(xùn)券(計(jì)算機(jī)操作員)").Cells(5, 23) '將圖片插入到指定的單元格中,我設(shè)置的單元格為W5單元格,可以更 '改為自己所需的單元格位置 End With With Selection .Top = Cells(5, 23).Top + 4 '插入圖片的上方位置為W5的位置向下4 '個(gè)單位,數(shù)字4可以更改 .Left = Cells(5, 23).Left + 5 '插入圖片的上方位置為W5的位置向下 '4個(gè)單位,數(shù)字4可以更改
14、 .Width = Cells(5, 23).Width + 110 '插入圖片的寬度為W5單元格的寬 '度加110個(gè)單位的寬度為圖片的整個(gè)寬度,110可以更改 .Height = Cells(5, 23).Height + 110 '插入圖片的高度為W5單元格的高 '度加110個(gè)單位的高度為圖片的整個(gè)高度,110可以更改 End With '戶籍 Set oCell1 = Worksheets(strSheet).Cells(iRow, 9)
15、 Set oCell2 = Worksheets("培訓(xùn)券(計(jì)算機(jī)操作員)").Cells(7, 6) oCell2.Value = oCell1.Value '身份證號(hào) Set oCell1 = Worksheets(strSheet).Cells(iRow, 8) Set oCell2 = Worksheets("培訓(xùn)券(計(jì)算機(jī)操作員)").Cells(9, 3) '指定身份證第一位數(shù)字所在的位置,以下類推。 Set cfz2 = Workshee
16、ts("培訓(xùn)券(計(jì)算機(jī)操作員)").Cells(9, 4) Set cfz3 = Worksheets("培訓(xùn)券(計(jì)算機(jī)操作員)").Cells(9, 5) Set cfz4 = Worksheets("培訓(xùn)券(計(jì)算機(jī)操作員)").Cells(9, 6) Set cfz5 = Worksheets("培訓(xùn)券(計(jì)算機(jī)操作員)").Cells(9, 7) Set cfz6 = Worksheets("培訓(xùn)券(計(jì)算機(jī)操作員)").Cells(9, 8) Set cfz7
17、= Worksheets("培訓(xùn)券(計(jì)算機(jī)操作員)").Cells(9, 9) Set cfz8 = Worksheets("培訓(xùn)券(計(jì)算機(jī)操作員)").Cells(9, 10) Set cfz9 = Worksheets("培訓(xùn)券(計(jì)算機(jī)操作員)").Cells(9, 11) Set cfz10 = Worksheets("培訓(xùn)券(計(jì)算機(jī)操作員)").Cells(9, 12) Set cfz11 = Worksheets("培訓(xùn)券(計(jì)算機(jī)操作員)").Cells(9, 13)
18、 Set cfz12 = Worksheets("培訓(xùn)券(計(jì)算機(jī)操作員)").Cells(9, 14) Set cfz13 = Worksheets("培訓(xùn)券(計(jì)算機(jī)操作員)").Cells(9, 15) Set cfz14 = Worksheets("培訓(xùn)券(計(jì)算機(jī)操作員)").Cells(9, 16) Set cfz15 = Worksheets("培訓(xùn)券(計(jì)算機(jī)操作員)").Cells(9, 17) Set cfz16 = Worksheets("培訓(xùn)券(計(jì)算機(jī)操作員)")
19、.Cells(9, 18) Set cfz17 = Worksheets("培訓(xùn)券(計(jì)算機(jī)操作員)").Cells(9, 19) Set cfz18 = Worksheets("培訓(xùn)券(計(jì)算機(jī)操作員)").Cells(9, 20) oCell2.Value = Mid((oCell1.Value), 1, 1) '給身份證第一位數(shù)字賦具體的值,以此類推。 cfz2.Value = Mid((oCell1.Value), 2, 1) cfz3.Value = Mid(
20、(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.
21、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,
22、 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) '工種 Set oCell1 = Worksheets(strSheet).Cells(iRow, 7)
23、 Set oCell2 = Worksheets("培訓(xùn)券(計(jì)算機(jī)操作員)").Cells(11, 11) oCell2.Value = oCell1.Value '培訓(xùn)券(計(jì)算機(jī)操作員)證件,"A1:E7" 為定義頁面的培訓(xùn)券(計(jì)算機(jī)操作員)范圍 Worksheets("培訓(xùn)券(計(jì)算機(jī)操作員)").Range("A1:AF25").PrintOut '清空sheet7中相片單元格中的照片為了避免照片打印重復(fù) Dim x As Integer
24、 For x = 1 To Sheet7.Shapes.Count If Sheet7.Shapes(x).TopLeftCell.Address = "$W$5" Then '絕對(duì)引用單元格W5是我設(shè)置的相片所在的單元格 Sheet7.Shapes(x).Delete '刪除圖片單元格的內(nèi)容 End If Next x Sheet1.Activate '激活當(dāng)前的工作表為sheet1即學(xué)員花名冊(cè)(計(jì)算機(jī)操作員)
25、 '打完一個(gè)證件后,詢問是否培訓(xùn)券(計(jì)算機(jī)操作員)下一個(gè)。 If MsgBox("繼續(xù)打印下一人員?", vbDefaultButton1 + vbYesNo) <> vbYes Then '中斷培訓(xùn)券(計(jì)算機(jī)操作員)打印 Exit Sub End If '為培訓(xùn)券(計(jì)算機(jī)操作員)下一人員做準(zhǔn)備 Set oCell1 = Worksheets(strSheet).Cells(iRow + 1, 1)
26、 oCell1.Activate Sheet1.Select '恢復(fù)當(dāng)前的工作表為sheet1即學(xué)員花名冊(cè)(計(jì)算機(jī)操作員) Else MsgBox "當(dāng)前行不是人員信息,不能打印" Exit Sub End If Loop End Sub 2)、實(shí)驗(yàn)結(jié)果 完成后按ALT+F11進(jìn)入代碼窗口,鼠標(biāo)點(diǎn)擊(或按F5)執(zhí)行宏操作會(huì)彈出宏對(duì)話框,如圖5所示 點(diǎn)擊“運(yùn)行”按鈕。 注意:在運(yùn)行前要選擇工作表學(xué)員花名冊(cè)(計(jì)算機(jī)操作員)即sheet1
27、,并且選擇A4單元格即序號(hào)為1的單元格,不然會(huì)出現(xiàn)提示:“請(qǐng)?jiān)谌藛T基本信息工作表中執(zhí)行此功能”,還要注意的是:在“培訓(xùn)券(計(jì)算機(jī)操作員)”工作表中,顯示比例改必須為100%,否則,打印出來的圖片不會(huì)在圖片框中。 這樣我們可以按照要求打印自己所要打印的證件了。手工幾天的工作不到半天就完成了,提高了工作效率,同時(shí)也減少了很多的錯(cuò)誤。 此代碼在Windows XP操作系統(tǒng)、Microsoft Office Excel 2010下編寫,并順利運(yùn)行通過。 四、結(jié)束語 在Excel制作電子表格過程中,充分利用VBA這一工具,提升Excel文件的技術(shù)含量,可使電子表格自動(dòng)化功能得到增強(qiáng),使電子表格更完善,更具有靈活多樣性。 執(zhí)行打印后的效果為下圖6所示 圖6執(zhí)行代碼后打印的效果圖
- 溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 市教育局冬季運(yùn)動(dòng)會(huì)安全工作預(yù)案
- 2024年秋季《思想道德與法治》大作業(yè)及答案3套試卷
- 2024年教師年度考核表個(gè)人工作總結(jié)(可編輯)
- 2024年xx村兩委涉案資金退還保證書
- 2024年憲法宣傳周活動(dòng)總結(jié)+在機(jī)關(guān)“弘揚(yáng)憲法精神推動(dòng)發(fā)改工作高質(zhì)量發(fā)展”專題宣講報(bào)告會(huì)上的講話
- 2024年XX村合作社年報(bào)總結(jié)
- 2024-2025年秋季第一學(xué)期初中歷史上冊(cè)教研組工作總結(jié)
- 2024年小學(xué)高級(jí)教師年終工作總結(jié)匯報(bào)
- 2024-2025年秋季第一學(xué)期初中物理上冊(cè)教研組工作總結(jié)
- 2024年xx鎮(zhèn)交通年度總結(jié)
- 2024-2025年秋季第一學(xué)期小學(xué)語文教師工作總結(jié)
- 2024年XX村陳規(guī)陋習(xí)整治報(bào)告
- 2025年學(xué)校元旦迎新盛典活動(dòng)策劃方案
- 2024年學(xué)校周邊安全隱患自查報(bào)告
- 2024年XX鎮(zhèn)農(nóng)村規(guī)劃管控述職報(bào)告