摘要:Excel是OFFICE家族成員中一個功能強(qiáng)大、技術(shù)先進(jìn)、使用方便的數(shù)據(jù)管理和分析系統(tǒng)。而在Excel中使用VBA(Visual Basic for Application的簡稱)對已有的信息表進(jìn)行宏編程,可以使用戶高效地生成新的工作表,達(dá)到辦公自動化的目的。文章用班級成績表生成重考報名表的實(shí)例,揭示了利用VBA在Excel中進(jìn)行二次開發(fā),提高工作效率,保證數(shù)據(jù)準(zhǔn)確性的強(qiáng)大功能。
關(guān)鍵詞:VBA;重考報名;信息表
中圖分類號:TP317文獻(xiàn)標(biāo)識碼:A文章編號:1009-3044(2008)30-0619-02
Programming for Development of Available Information Sheets
NI Bin
(Haining College,Zhejiang Radio TV University,Haining 314400,China)
Abstract: Excel is a powerful, advanced and convenient system for data management and analysis among the OFFICE family. Programming the available Excel sheets with VBA (Visual Basic for Application) macro can help users generate new sheets efficiently, which can realize office automation. This paper uses the example of generating make-up examination entry forms from report sheets. VBA’s second exploitation in Excel has the powerful function of improving the work efficiency and guarantee the data accuracy.
Key words: VBA; make-up examination entry forms; information table
1 引言
Excel是一個功能強(qiáng)大、人們普遍使用的表格式數(shù)據(jù)綜合管理和分析軟件。它向用戶提供了史無前例的超強(qiáng)計算功能和表格功能。但隨著辦公室工作人員計算機(jī)應(yīng)用水平的不斷提高,人們已不滿足對該軟件的簡單應(yīng)用,用戶希望軟件的應(yīng)用能夠更加人性化、個性化,以及用軟件解決問題的步驟更加簡單化。為了滿足用戶的較高層次或更高的“自動化”要求,我們就需要利用Excel的宏編程Visual Basic for Application(簡稱VBA)來對工作表做二次開發(fā)。VBA給廣大用戶提供了更高層次的二次開發(fā)平臺。
在工作中我們經(jīng)常會遇到,對原有信息表的格式和內(nèi)容進(jìn)行修改,生成新的工作表這樣的情況。比如,對已有的單位員工的工資匯總表,給工作表中每行員工的工資數(shù)據(jù)添加列的標(biāo)題,調(diào)整格式后做分條顯示;由班級成績表的數(shù)據(jù),生成每位同學(xué)的成績單;對企業(yè)員工根據(jù)政治面貌和工資水平生成黨團(tuán)費(fèi)收交清單;利用已有的考試數(shù)據(jù)表生成考生考試通知單;由企業(yè)員工基本信息表,生成指定年齡段員工信息;對原有數(shù)據(jù)表生成新的統(tǒng)計信息工作表等等。可以看到,對原信息表進(jìn)行二次利用,生成新信息表的例子不計其數(shù)。對于這些工作,在理論上都可以通過機(jī)械的手工操作來達(dá)到制作新工作表的目的,但因處理的數(shù)據(jù)非常龐大,完成這些新的工作表將變得費(fèi)時費(fèi)力,而且根本無法保證其正確性。而結(jié)合VBA可以定制開發(fā)出大量有價值的應(yīng)用程序,這些應(yīng)用程序無疑將會為我們的工作和生活帶來巨大的樂趣與效率。
本文以學(xué)校教務(wù)部門重考報名表自動生成的實(shí)際應(yīng)用,來揭示利用VBA程序,對已有信息表二次利用的無限魅力。
2 問題的提出和初級解決辦法
每到學(xué)期結(jié)束,學(xué)校教務(wù)部門總要給每個班級制作一張成績匯總表,并針對該成績制作一張下學(xué)期初的重考報名表。而該重考報名表的制作,Excel并沒有現(xiàn)成的功能可以使用,只能要求老師在制作過程中認(rèn)真仔細(xì)。當(dāng)然,我們可以利用Excel的條件格式功能,將需要參加重考的成績(即“缺考”和60分以下的成績)用特殊格式標(biāo)注出來,這樣從一定程度上可以減少操作錯誤,如圖1所示。但在對單元格手工刪除、修改的過程中仍然無法避免操作出錯的可能性。
顯然,該原始的手工方法存在著兩大缺點(diǎn):效率低下;容易出錯。
3 VBA解決方法
3.1 設(shè)計思想
計算機(jī)的優(yōu)勢在于可以快速地完成重復(fù)性的邏輯判斷操作。因此,針對實(shí)際問題,考慮采用VBA編程來解決。主要的設(shè)計依據(jù):根據(jù)已有的班級成績匯總表,成績有百分制成績、缺考、免考三種數(shù)據(jù)類型。而在VBA中可用cells(i,j)對表中的第i行,第j列單元格進(jìn)行讀寫控制和讀寫操作。所寫的程序就要對學(xué)生成績進(jìn)行判斷,若是及格成績則不需重考,用Cells(i, j) = \"\"清空該單元格。若成績不及格或是“缺考”,則用“√”標(biāo)記該單元格。再把經(jīng)替換后的工作表中不需要重考的學(xué)生行和沒有學(xué)生重考的課程列刪除,即可得到最終的班級重考報名表。此外,為保護(hù)原來的成績匯總表,在生成重考報名表前先備份該工作表。
3.2 宏代碼編制
在Excel 菜單欄中,打開“工具/宏(M) /宏(M)?”對話框(也可用快捷健Alt+F8 打開),輸入宏名(本文用的是“生成重考報名表”),單擊“創(chuàng)建”按鈕后進(jìn)入宏代碼編輯窗口,輸入以下程序:
On Error Resume Next
Application.ScreenUpdating = False'關(guān)閉屏幕自動更新
Dim StudentNum As Integer
Dim ClassNum As Integer
StudentNum = Val(InputBox(\"請輸入學(xué)生人數(shù)\"))'用戶輸入學(xué)生人數(shù)
ClassNum = Val(InputBox(\"請輸入課程門數(shù)\"))'用戶輸入課程門數(shù)
'備份成績匯總表,對復(fù)制的工作表重命名為“重考報名”
Sheets(1).Copy After:=Sheets(Sheets.Count)
Sheets(Sheets.Count).Name = \"重考報名\"
'替換工作表單元格
For i = 2 To StudentNum + 1'成績數(shù)據(jù)從第2行開始
For j = 3 To ClassNum + 2'課程列從第3行開始
If (IsNumeric(Cells(i, j)) And Cells(i, j) >= 60) Or Cells(i, j) Like \"免考\" Then
Cells(i, j) = \"\"'不需重考的單元格清空
ElseIf Cells(i, j) < 60 Or Cells(i, j) Like \"缺考\" Then
Cells(i, j) = \"√\"'需要重考的單元格打勾
End If
Next j
Next i
Dim StuFlag As Boolean'學(xué)生是否有重考判斷標(biāo)記
For i = StudentNum + 1 To 2 Step -1
StuFlag = False
For j = 3 To ClassNum + 2
If Cells(i, j) <> \"\" Then
StuFlag = True
Exit For
End If
Next j
If StuFlag = False Then '不需重考則刪除該學(xué)生行
Range(Cells(i, 1), Cells(i, 1)).Select
Selection.EntireRow.Delete
End If
Next i
Dim ClassFlag As Boolean'課程是否有學(xué)生重考標(biāo)記
For i = ClassNum + 2 To 3 Step -1
ClassFlag = False
For j = 2 To StudentNum + 2
If Cells(j, i) <> \"\" Then
ClassFlag = True
Exit For
End If
Next j
If ClassFlag = False Then '若課程沒有學(xué)生重考刪除該列
Range(Cells(1, i), Cells(1, i)).Select
Selection.EntireColumn.Delete
End If
Next i
Application.ScreenUpdating = True '開啟屏幕更新
3.3 宏代碼的運(yùn)行
在Excel窗口,再次打開“工具/宏(M)/宏(M)…”對話框,選擇“生成重考報名表”,點(diǎn)“選項(xiàng)”,在彈出的對話框中輸入快捷鍵字母(本例用m),單擊“確定”即可。用快捷鍵Ctrl+ m 即可啟動宏,生成的重考報名表如圖2所示。
4 結(jié)束語
盡管VBA編程開發(fā)不是巨大的系統(tǒng)編程,但實(shí)用的小程序確能給現(xiàn)實(shí)工作效率的提高帶來無限生機(jī)。VBA就像一個接口,給Excel提供了更多的擴(kuò)展,滿足用戶的個性化需求。由于篇幅的原因,本文只簡單介紹了由成績匯總表生成重考報名表的成功實(shí)例,希望能起到拋磚引玉,進(jìn)而挖掘更多更好應(yīng)用實(shí)例的作用。利用VBA程序開發(fā),對已有信息表二次利用,生成用戶所需的新工作表,這一過程使我們的想象力變得無限寬廣,在提高效率的基礎(chǔ)上,也給計算機(jī)的使用者帶來無限樂趣。
參考文獻(xiàn):
[1] 龔沛,陸慰民,楊志強(qiáng).Visual Basic 程序設(shè)計教程(6.0版)[M].北京:高等教育出版社,2000.
[2] 漢森.Excel 2003 與VBA 編程從入門到精通[M].李兆斌,譯.北京:電子工業(yè)出版社,2004.
[3] 李慧.用VBA開發(fā)基于Excel的數(shù)據(jù)統(tǒng)計[J].電腦知識與技術(shù):學(xué)術(shù)交流,2007,3(17).
注:本文中所涉及到的圖表、注解、公式等內(nèi)容請以PDF格式閱讀原文