摘 要:論述了利用EXCEL的VBA編程功能,把相當(dāng)大的數(shù)據(jù)處理任務(wù)交給程序自動(dòng)進(jìn)行處理, 實(shí)現(xiàn)了表格的自動(dòng)批量復(fù)制打印,實(shí)現(xiàn)了辦公自動(dòng)化,提高了EXCEL在實(shí)際應(yīng)用中的工作效率及節(jié)省人力資源。
關(guān)鍵詞:EXCEL VBA ;批量打印;登記卡;辦公自動(dòng)化
1 問題的提出
在體育教學(xué)過程中,體育教師每年都要對(duì)學(xué)生進(jìn)行體質(zhì)健康測試,還要填《國家學(xué)生體質(zhì)健康標(biāo)準(zhǔn)》登記卡上報(bào)數(shù)據(jù)。比如要實(shí)現(xiàn)如下一項(xiàng)任務(wù),見圖1、圖2和圖3。
要求把圖1中的數(shù)據(jù)按照圖2、圖3 《國家學(xué)生體質(zhì)健康標(biāo)準(zhǔn)》登記卡的格式填寫完整并打印輸出。按照常規(guī)的方法,把第一個(gè)人的信息依次復(fù)制到要打印的表格中,然后打印,再復(fù)制下一個(gè)人員,依此類推。如果人很多的話,這項(xiàng)工作很是繁瑣,也容易出錯(cuò)。因此,我寫了一個(gè)VBA程序,讓工作自動(dòng)進(jìn)行。
1.1什么是VBA?
在Office軟件中,VBA應(yīng)用程序能夠在Word、Excel等之間進(jìn)行交互式應(yīng)用,加強(qiáng)了應(yīng)用程序間的互動(dòng)。
1.2實(shí)現(xiàn)方法
為了描述方便,筆者將含有數(shù)據(jù)的表格(圖1)命名為數(shù)據(jù)表,其工作表標(biāo)簽為“成績統(tǒng)計(jì)”,將要打印的《國家學(xué)生體質(zhì)健康標(biāo)準(zhǔn)》登記卡(圖1、圖2)命名為“1-2年級(jí)打印”、“3-4年級(jí)打印”、“5-6年級(jí)打印”,其工作表標(biāo)簽相應(yīng)命名。
2 系統(tǒng)設(shè)計(jì)
2.1程序設(shè)計(jì)的主要思路
假設(shè)此工作是用手工操作的話,比如從第2行記錄打印到第10行記錄,那么操作過程應(yīng)該是這樣的:把數(shù)據(jù)表中的D4單元格中的“諸葛亮”復(fù)制到登記表中的C4單元格中,把數(shù)據(jù)表中的E4復(fù)制到登記表中的I4,依此類推,直至把“諸葛亮” 的一分鐘跳繩的成績復(fù)制到登記表中對(duì)應(yīng)的D16單元格中,數(shù)據(jù)復(fù)制完成后,打印輸出,這樣就完成了第2行記錄的操作,接下來復(fù)制“夏侯惇”的數(shù)據(jù)到登記中,然后再打印。如此一直到第10 行記錄“任盈盈”。根據(jù)這個(gè)工作流程,如果用程序來實(shí)現(xiàn)的話,可以通過循環(huán)的方式復(fù)制數(shù)據(jù)表中的數(shù)據(jù)到登記表中對(duì)應(yīng)的位置,再用循環(huán)的方式處理多個(gè)不同人員的信息。
2.2程序的功能
根據(jù)工作中的需要,程序應(yīng)該可以實(shí)現(xiàn)多種批量打印的形式,主要包括以下幾種:
(1) 連續(xù)的記錄,如從第5行到第50行。
(2) 不連續(xù)的記錄,如第5、10、15、20行這四條記錄。
(3) 根據(jù)學(xué)籍號(hào)打印某一條記錄。
(4) 分年級(jí)打印記錄。
(5) 分班級(jí)打印記錄。
上述幾種形式在某些時(shí)候可以達(dá)到相同的目的,如第(2) 種形式中,選擇連續(xù)的記錄就和第(1)種形式相同,選擇單個(gè)的記錄就與第(3)種形式相同;第(4) 種形式和第(5) 種形式結(jié)構(gòu)相同。
2.3程序的關(guān)鍵技術(shù)
第一、由程序的設(shè)計(jì)思路可知,程序運(yùn)行時(shí)用戶就要告訴程序處理的是哪些數(shù)據(jù)。由于各年級(jí)的表格不盡相同,就需要分別調(diào)用對(duì)應(yīng)的表格模板。
第二、由于要處理不同人員的數(shù)據(jù),以及提取相應(yīng)信息,所以要用到兩個(gè)循環(huán)。處理不同人員的數(shù)據(jù)時(shí),調(diào)用對(duì)應(yīng)的學(xué)籍號(hào)就可以了;而提取相應(yīng)的信息,要在各自的模板中進(jìn)行,再由程序調(diào)用。
第三、程序要能與用戶交互。可以由用戶選擇打印或不打印哪些數(shù)據(jù)。
第四、由于程序要批量打印,也讓用戶心中有數(shù),因此,已經(jīng)打印過的數(shù)據(jù)要做出記號(hào),避免重復(fù)。
3 用戶界面的設(shè)計(jì)和代碼的編寫
在新的excel工作簿里建6個(gè)工作表,標(biāo)簽名稱分別為“成績統(tǒng)計(jì)”、“評(píng)分標(biāo)準(zhǔn)”、“測試成績”、“1-2年級(jí)打印”、“3-4年級(jí)打印”、“5-6年級(jí)打印”。前面3個(gè)工作表的內(nèi)容網(wǎng)上有,這兒就不介紹了。后面3個(gè)工作表,分別把各自對(duì)應(yīng)的模板復(fù)制過來就好,分別在右上角添加一個(gè)命令按鈕,其顯示為“打印登記卡”作為用戶召喚打印頁面的選擇。在Excel中按ALT+F11,可以打開VBE界面,點(diǎn)擊“插入”——“用戶窗體”,就插入了一個(gè)窗體,為了在程序中方便地引用它,可以把它的名稱改為U12print,用同樣的方法再添加兩個(gè)窗體,分別命名為U34print、U56print如圖4。
在窗體的上部放一個(gè)文本框,作為輸入口,一個(gè)命令按鈕其顯示為“查詢”。相關(guān)的代碼如下:
Private Sub cmd查詢_Click()
Dim SQL$, i&
If Trim(Text1.Text) = “” Then Exit Sub
Check1.Value = False: Check2.Value = False: Check3.Value = False
SQL = "Select * from [成績統(tǒng)計(jì)$A4:AM" & myR & "] where f3 like '%" & UCase(Trim(Text1.Text)) & "%'"
List1.Clear
If rs.State <> 0 Then rs.Close
rs.Open SQL, cnn, 1, 3
If rs.RecordCount > 0 Then
For i = 0 To rs.RecordCount - 1
If rs.Fields(2) <> "" Then List1.AddItem rs.Fields(2) '學(xué)籍號(hào)
rs.MoveNext
Next
End If
End Sub
在窗體的中部放一個(gè)列表框控件list1,以便顯示學(xué)生學(xué)籍號(hào)。右邊兩個(gè)多選按鈕其顯示為“已打印 登記卡”、“未打印 登記卡”,下邊一個(gè)多選按鈕“選中全部記錄”。右邊兩個(gè)顯示為“打印”和“關(guān)閉”的命令按鈕。相關(guān)的代碼如下:
以上代碼是打印1—2年級(jí)的,其他年級(jí)的與此相似。
值得說明的是,列表框控件的MultiSelect屬性應(yīng)該設(shè)置為2-fmMultiSelectExtended,這樣,用戶可以利用Shift和Ctrl鍵對(duì)列表框中的記錄進(jìn)行多項(xiàng)選擇。當(dāng)用戶選擇“未打印 登記卡”時(shí)列表框中出現(xiàn)所有還未打印的列表選項(xiàng),用戶可以自由選擇打印。
要打印的數(shù)據(jù)源要從圖1往圖2圖3的對(duì)應(yīng)位置引用。如要打印圖2任盈盈的資料,這樣引用:在C4單元格里輸入“=IF($M$4="","",INDEX(成績統(tǒng)計(jì)!$A:$AL,MATCH($M$4,成績統(tǒng)計(jì)!$C:$C,0),4))”其他引用的數(shù)據(jù)與此相似就不多介紹了。最后,新建一個(gè)模塊1,把顯示為“打印登記卡”的命令按鈕與窗體聯(lián)系起來,代碼如下:
4 程序的測試和運(yùn)行
用戶在各頁選擇“打印登記卡”時(shí)分別召喚對(duì)應(yīng)的窗體,套用對(duì)應(yīng)模板打印對(duì)應(yīng)數(shù)據(jù)。如圖4、圖5、圖6。
用戶在窗體選擇“未打印 登記卡”時(shí),列表框中列出當(dāng)前未被打印的數(shù)據(jù),選擇“選中全部記錄”時(shí),再按“打印”就可以全部打印。
5 結(jié)語
經(jīng)過試驗(yàn),程序可以正常運(yùn)行并實(shí)現(xiàn)系統(tǒng)設(shè)計(jì)中的功能。由此看出,在Excel中,VBA提供了廣大的可自由擴(kuò)展的空間,可以用VBA來編制適合自己專用的程序,大大減輕工作量,更好地利用計(jì)算機(jī)為我們服務(wù)。
參考文獻(xiàn)
[1]崔曉宏.用VBA實(shí)現(xiàn)批量復(fù)制和打印任務(wù)[J].電腦編程技巧與維護(hù),2010(21).86-89.
[2]羅剛君.EXCELVBA程序開發(fā)自學(xué)寶典(第3版)[M].北京:電子工業(yè)出版社,2014.
[3]shywkb.2014學(xué)生體質(zhì)健康測試計(jì)算模板(中、小學(xué)).Excelhome論壇[M].北京:人民郵電出版社,2012.
作者簡介
范拽拽(1980-),男,漢 山西省洪洞縣,大專,漢語言文學(xué)。