摘要:VBA是一種自動(dòng)化語(yǔ)言,它可以使常用的程序自動(dòng)化,可以創(chuàng)建自定義的解決方案,,還可以將EXCEL用做開(kāi)發(fā)平臺(tái)實(shí)現(xiàn)應(yīng)用程序。因此,VBA可以稱(chēng)作EXCEL的“遙控器”。同時(shí),VBA作為新一代標(biāo)準(zhǔn)宏語(yǔ)言,提供了面向?qū)ο蟮某绦蛟O(shè)計(jì)方法和相當(dāng)完整的程序設(shè)計(jì)語(yǔ)言。對(duì)于在工作中需要經(jīng)常使用Office 套裝軟件的用戶(hù),善用VBA 有助于使工作自動(dòng)化,提高工作效率。
關(guān)鍵詞:VBA;excel;程序設(shè)計(jì)
中圖分類(lèi)號(hào):TP317文獻(xiàn)標(biāo)識(shí)碼:A文章編號(hào):1009-3044(2009)24-6627-02
Examining Test Papers of Excel’s Date Management by VBA Programming
WU Jing-zhi
(Shaoguan University,Shaoguan 512005, China)
Abstract: VBA is one kind of automated language, it may cause the commonly used automatic programming,it may found from the definition solution, it may with do EXCEL develops the platform realization application procedure.so, VBA may be called as EXCEL the remote control. VBA takes the new generation of standard great language,it has provided the object-oriented programming method and the quite complete programming language. Regarding needs to use the Office coverall software frequently in the work the user,who makes good use of VBA to be helpful in causes the work automation and enhances the working efficiency.
Key words: VBA; excel; programming
在將“高效”貫徹到我們?nèi)粘9ぷ鞯慕裉欤绾胃咝У毓ぷ饕恢笔俏覀兲接懙膯?wèn)題。作為在日常辦公中離不開(kāi)的Excel軟件也在竭盡所能提高功能,幫助我們節(jié)省工作時(shí)間、提高工作效率。其中VBA就是這樣一個(gè)利器。
1 VBA簡(jiǎn)介
VBA是什么?VBA(Visual Basic For Application)是一種自動(dòng)化語(yǔ)言,它可以使常用的程序自動(dòng)化,可以創(chuàng)建自定義的解決方案,此外,還可以將EXCEL用做開(kāi)發(fā)平臺(tái)實(shí)現(xiàn)應(yīng)用程序。
對(duì)多數(shù)人來(lái)說(shuō),使應(yīng)用程序自動(dòng)化仍是充滿(mǎn)挑戰(zhàn)性的領(lǐng)域。對(duì)每個(gè)需要自動(dòng)化的應(yīng)用程序,人們不得不學(xué)習(xí)一種不同的自動(dòng)化語(yǔ)言,例如:可以用EXCEL的宏語(yǔ)言來(lái)使EXCEL自動(dòng)化,使用WORD BASIC使WORD自動(dòng)化等等。微軟決定讓它開(kāi)發(fā)出來(lái)的應(yīng)用程序共享一種通用的自動(dòng)化語(yǔ)言——Visual Basic For Application(VBA),可以認(rèn)為VBA是非常流行的應(yīng)用程序開(kāi)發(fā)語(yǔ)言VISUAL BASIC 的子集。實(shí)際上VBA是寄生于VB應(yīng)用程序的版本。
VBA和VB的區(qū)別包括如下幾個(gè)方面:VB是設(shè)計(jì)用于創(chuàng)建標(biāo)準(zhǔn)的應(yīng)用程序,而VBA是使已有的應(yīng)用程序(EXCEL等)自動(dòng)化;VB具有自己的開(kāi)發(fā)環(huán)境,而VBA必須寄生于已有的應(yīng)用程序;要運(yùn)行VB開(kāi)發(fā)的應(yīng)用程序,用戶(hù)不必安裝VB,因?yàn)閂B開(kāi)發(fā)出的應(yīng)用程序是可執(zhí)行文件(*.EXE),而VBA開(kāi)發(fā)的程序必須依賴(lài)于它的父應(yīng)用程序,例如EXCEL.。盡管存在這些不同,VBA和VB在結(jié)構(gòu)上仍然十分相似。如果已經(jīng)了解了VB,會(huì)發(fā)現(xiàn)學(xué)習(xí)VBA非常快。相應(yīng)的,學(xué)完VBA會(huì)給學(xué)習(xí)VB打下堅(jiān)實(shí)的基礎(chǔ)。而且,當(dāng)學(xué)會(huì)在EXCEL中用VBA創(chuàng)建解決方案后,即已具備在WORD ACCESS OUTLOOK FOXPRO PROWERPOINT 中用VBA創(chuàng)建解決方案的大部分知識(shí)。
VBA一個(gè)關(guān)鍵特征是你所學(xué)的知識(shí)在微軟的一些產(chǎn)品中可以相互轉(zhuǎn)化。Office取得巨大成功的一個(gè)重要原因就是VBA,使用VBA可以完成很多事情,基于Excel、Word的VBA小程序非常多。VBA程序員很多是業(yè)余程序員,但編寫(xiě)出來(lái)的程序所解決的卻是工作中需要解決的問(wèn)題。
2 VBA編程實(shí)例
我們知道excel數(shù)據(jù)管理部分包括數(shù)據(jù)透視表、分類(lèi)匯總、數(shù)據(jù)排序等和各種公式函數(shù)運(yùn)算,這些操作各不相同,如果要對(duì)這部分題目進(jìn)行閱卷操作,針對(duì)不同的知識(shí)點(diǎn)要分別寫(xiě)出對(duì)應(yīng)的閱卷模塊。我們發(fā)現(xiàn),完成同一道excel數(shù)據(jù)管理題目,可以有不同的操作方法,在閱卷的時(shí)候要把這些不同的操作方法都考慮進(jìn)去的話(huà),閱卷模塊的編寫(xiě)就顯得很繁瑣,而且閱卷人也未必能考慮的很全面。我們發(fā)現(xiàn),對(duì)一道excel數(shù)據(jù)管理題,不論以什么方法來(lái)做,最后的結(jié)果只能有一種情況,那么我們可以針對(duì)這個(gè)結(jié)果采用取樣匹配的方式來(lái)進(jìn)行閱卷,這樣一來(lái)就能很輕松實(shí)現(xiàn)對(duì)各種類(lèi)型的excel數(shù)據(jù)管理題目的閱卷工作。
要對(duì)一道excel數(shù)據(jù)管理題目進(jìn)行閱卷,需要編寫(xiě)一個(gè)針對(duì)該題目的調(diào)用函數(shù),另外還需要一個(gè)公有的閱卷模塊。總的思路是在該題目函數(shù)里輸入要進(jìn)行取樣的單元格坐標(biāo)及單元格內(nèi)的數(shù)據(jù)(答案),然后調(diào)用公有閱卷模塊,與學(xué)生的操作結(jié)果進(jìn)行匹配,完全匹配給分,否則0分。
如下,我們來(lái)看一個(gè)例子:以F1單元格為左上角創(chuàng)建一數(shù)據(jù)透視表,表現(xiàn)出性別與職稱(chēng)對(duì)照分類(lèi)的工資平均值,要求同一職稱(chēng)的數(shù)據(jù)在同一行,同一性別的數(shù)據(jù)在同一列。電子表格文件為“xls001.xls”,數(shù)據(jù)所在的工作表為“sheet1”,文件目錄為“D:\est”文件夾。例題原數(shù)據(jù)(圖1 例題數(shù)據(jù))及操作結(jié)果(圖2 操作結(jié)果)。
如前所述,對(duì)該操作結(jié)果進(jìn)行批改,要有一個(gè)題目函數(shù)和公有閱卷模塊。題目函數(shù)的功能為打開(kāi)待批改的電子表格文件,輸入取樣單元格坐標(biāo)及單元格內(nèi)數(shù)據(jù)(答案),通過(guò)調(diào)用公有模塊將輸入的數(shù)據(jù)(答案)與操作結(jié)果進(jìn)行匹配。
題目函數(shù)主要代碼及相關(guān)說(shuō)明如下:
Function xls001(參數(shù)列表) as single
Score = 5‘題目初始分值,假設(shè)為5分
sfilename = \"D:test\\xls001.xls\"‘待批改文件路徑
Try‘引入try …… catch 語(yǔ)句避免因文件不存在導(dǎo)致程序無(wú)法運(yùn)行
oexcelbook = oexcel.Workbooks.Open(sfilename) ‘打開(kāi)文件
Try
Dim air(10) As Object '該數(shù)組用于保存取樣單元格坐標(biāo)
Dim ascont(10) As Object '該數(shù)組用于保存取樣單元格內(nèi)數(shù)據(jù)
air = New Object() {\"f1\", \"g1\", \"f2\"}‘輸入取樣單元格坐標(biāo)
ascont = New Object() {\"平均值項(xiàng):工資\", \"性別\", \"職稱(chēng)\"} ‘輸入取樣單元格內(nèi)數(shù)據(jù)(答案)
xls001 = test(oexcel, air, ascont, score)
Catch ex As Exception
End Try
Catch ex As Exception
mess_1 = \"文件不存在!,0分\"
xls001 = 0
Exit Function
End Try
oexcelbook.Saved = True
oexcelbook.Close()‘閱卷結(jié)束,關(guān)閉文件
End Function
公有閱卷模塊主要代碼及相關(guān)說(shuō)明如下:
Public Function test(參數(shù)列表) As Single
Dim mwksheet As Excel.Worksheet
mwksheet = oexcelbook.Worksheets(\"Sheet1\")‘指定數(shù)據(jù)所在的工作表
For i = 0 To 2‘該For循環(huán)用于對(duì)取樣單元格內(nèi)數(shù)據(jù)與所給答案逐一匹配,發(fā)現(xiàn)一處不匹配即給0分,并退出循環(huán)
If mwksheet.Range(air(i)).Text <> ascont(i) Then
score = 0
Exit For
End If
Next i
test = score‘最終得分
End Function
對(duì)于取樣單元格個(gè)數(shù)可以自行決定,可以在題目函數(shù)中設(shè)置一變量用于指定取樣單元格個(gè)數(shù),閱卷模塊通過(guò)參數(shù)傳遞方式獲得該值,作為單元格匹配次數(shù)(即For循環(huán)次數(shù))。
3 結(jié)束語(yǔ)
Visual Basic for Applications(VBA)是新一代標(biāo)準(zhǔn)宏語(yǔ)言,是基于Visual Basic for Windows 發(fā)展而來(lái)的。它與傳統(tǒng)的宏語(yǔ)言不同,傳統(tǒng)的宏語(yǔ)言不具有高級(jí)語(yǔ)言的特征,沒(méi)有面向?qū)ο蟮某绦蛟O(shè)計(jì)概念和方法。而VBA 提供了面向?qū)ο蟮某绦蛟O(shè)計(jì)方法和相當(dāng)完整的程序設(shè)計(jì)語(yǔ)言。VBA 易于學(xué)習(xí)掌握,可以使用宏記錄器記錄用戶(hù)的各種操作并將其轉(zhuǎn)換為VBA 程序代碼。這樣用戶(hù)可以容易地將日常工作轉(zhuǎn)換為VBA 程序代碼,使工作自動(dòng)化。因此,對(duì)于在工作中需要經(jīng)常使用Office 套裝軟件的用戶(hù),用好VBA 有助于使工作自動(dòng)化,提高工作效率。另外,由于VBA 可以直接應(yīng)用Office 套裝軟件的各項(xiàng)強(qiáng)大功能,所以對(duì)于程序設(shè)計(jì)人員的程序設(shè)計(jì)和開(kāi)發(fā)更加方便快捷。
參考文獻(xiàn):
[1] Jelen B,Syrstad T.Excel 2007 VBA與宏完全剖析[M].郭兵英,譯.北京:人民郵電出版社,2008.
[2] 魏汪洋.Excel 2007 VBA高級(jí)編程[M].北京:電子工業(yè)出版社,2009.
[3] Walkenbach J.中文Excel 2007高級(jí)VBA編程[M].馮飛,焦瑜凈,譯.北京:清華大學(xué)出版社,2009.
[4] 格林.Excel Home譯.Excel 2007參考大全[M].北京:人民郵電出版社,2009.
[5] 趙全斌.Excel工程應(yīng)用[M].北京:清華大學(xué)出版社,2009.