李小虎
(山西廣播電視無(wú)線管理中心,山西 太原 030001)
Word宏在山西省職業(yè)技能命題題庫(kù)中的應(yīng)用
李小虎
(山西廣播電視無(wú)線管理中心,山西 太原 030001)
Visual Basic for Applications(VBA)是Visual Basic的一種宏語(yǔ)言[1],是微軟開發(fā)出來(lái)在其OFFIC桌面應(yīng)用程序中執(zhí)行通用的自動(dòng)化(OLE)任務(wù)的編程語(yǔ)言。本文使用word宏功能編輯了一個(gè)格式轉(zhuǎn)換程序,用以快速地將命題老師的題轉(zhuǎn)化為可以被題庫(kù)軟件識(shí)別的格式,文章主要論述了程序的設(shè)計(jì)思路,以及各種輔助方法,最后使用宏程序順利地完成格式轉(zhuǎn)化,迅速完成了題庫(kù)轉(zhuǎn)化的任務(wù),節(jié)省了大量時(shí)間。
VBA;宏;Word;題庫(kù)格式
微軟在其OFFICE系列軟件上提供了Visual Basic程序,用來(lái)擴(kuò)展OFFICE系列軟件的程序功能,一般稱為宏功能,宏程序的設(shè)計(jì)語(yǔ)言學(xué)術(shù)名稱叫Visual Basic for Applications(VBA),是微軟在1993年開發(fā)設(shè)計(jì)出來(lái)的自動(dòng)化語(yǔ)言[2],Word宏功能簡(jiǎn)單點(diǎn)理解就是使用程序?qū)ord中的格式輸入等等操作進(jìn)行批處理,在遇到比較繁雜的文件處理時(shí),使用宏功能能夠很好地節(jié)省時(shí)間,做好工作[3]。
本人所在部門承擔(dān)了山西省技師命題任務(wù),由部門中四人分別針對(duì)電視、調(diào)頻、中波、微波四個(gè)部分的內(nèi)容,每個(gè)部分的內(nèi)容需要在教材上找尋50個(gè)理論的鑒定點(diǎn),25個(gè)操作的鑒定點(diǎn),每個(gè)鑒定點(diǎn)需要設(shè)計(jì)7道題:兩道判斷、三道單選、兩道多選,總計(jì)算有:每部分75個(gè)鑒定點(diǎn)*每個(gè)鑒定點(diǎn)7道題*4部分=2 100道題。根據(jù)山西省職業(yè)技能鑒定中心出具的格式導(dǎo)入說(shuō)明,每道題都需要變換為特殊格式,最后將題導(dǎo)入到題庫(kù)中。本人承擔(dān)了格式變換導(dǎo)入工作。由于任務(wù)重復(fù)度大、任務(wù)量多,最后考慮使用宏功能實(shí)現(xiàn)對(duì)于格式的變換。
如圖1所示,導(dǎo)入格式必須將每道題題干前部加入“[T]A-A-001 5 1 3”,尾部加入“[T/]”,用以表明題干內(nèi)容,同時(shí)由于鑒定點(diǎn)的不同,前部加入的內(nèi)容也會(huì)不同,例如“A-B-001”、“B-A-001”、“A-A-002”等變化,同時(shí)代表題型的數(shù)字部分也會(huì)隨著判斷、單選、多選而變化。對(duì)于答案部分也是加頭加尾,只是需要注意的是如果是多選題則多個(gè)答案之間必須加入逗號(hào)隔開,例如“[T]A,B,C,D,E[T/]”。對(duì)于整體的內(nèi)容來(lái)說(shuō),題與題之間還必須加入空行隔開,如圖2所示。
圖1 導(dǎo)入格式說(shuō)明
圖2 多題內(nèi)容格式
由于四位出題人已經(jīng)將題出完,每個(gè)人的題型排列各有差別。如圖3是中波題型,中波題型是單選、多選、判斷的排列方式。如圖4是微波題型,與中波題型不同的是答案寫在了每道題的最后而不是填入到括號(hào)里,以及判斷題的答案是用英文字母XV來(lái)表示正確錯(cuò)誤。不過(guò)每個(gè)人每個(gè)鑒定點(diǎn)的格式是相同的,對(duì)此,將格式變換設(shè)計(jì)為兩步走。將每個(gè)鑒定點(diǎn)的題復(fù)制到單獨(dú)的新建word文檔,轉(zhuǎn)化到最終格式后復(fù)制粘貼到總文檔里。
圖3 中波原始格式
圖4 微波原始格式
第一步為每個(gè)部分的題設(shè)計(jì)一個(gè)轉(zhuǎn)化程序,將格式轉(zhuǎn)換為如圖5的格式,圖5所示標(biāo)準(zhǔn)題型排列為判斷、單選、多選,同時(shí)每個(gè)鑒定點(diǎn)的題都是“1、”“2、”“1、”“2、”“3、”“1、”“2、”的開頭表示,這個(gè)標(biāo)識(shí)在下一步的程序設(shè)計(jì)中非常重要。對(duì)于中波題來(lái)說(shuō)轉(zhuǎn)化為標(biāo)準(zhǔn)格式,只需要利用代碼尋找第三個(gè)“1、”,然后將“1、”到文檔尾的內(nèi)容全部選中,剪切,將光標(biāo)移到文檔首,粘貼,這樣就將判斷題放到了前部,最后將“多選題:”“判斷題:”刪除,去掉空行,中波格式就轉(zhuǎn)化為標(biāo)準(zhǔn)格式了。對(duì)于微波題來(lái)說(shuō),因?yàn)榇鸢肝恢貌煌?,以第一題為例,搜尋第一個(gè)“2、”,再將光標(biāo)上移一行,選中本行,剪切,向上通配符查找“(*)”定位第一題的括號(hào),然后移動(dòng)光標(biāo)到括號(hào)里,粘貼,就將答案放到題中的括號(hào)中了。剩下的電視、調(diào)頻也各自略有調(diào)整,轉(zhuǎn)化為標(biāo)準(zhǔn)格式。
圖5 標(biāo)準(zhǔn)格式
圖6 最終格式
第二步是將標(biāo)準(zhǔn)格式轉(zhuǎn)化為最終格式(如圖6所示),由于每個(gè)鑒定點(diǎn)的鑒定范圍和排序不一樣,所以程序開始利用InputBox函數(shù),彈出輸入框輸入標(biāo)識(shí),點(diǎn)擊“確定”將標(biāo)識(shí)傳給程序,如圖7所示。接下來(lái)用全部替換代碼去除掉題中的全部空格,之后程序轉(zhuǎn)化以第一題判斷題為例,查找第一個(gè)“1、”并將之替換為“[T]A-A-@ 2 1 3 ^p”,其中“^p”代表回車換行,然后通配符查找第一個(gè)“(*)”并將之復(fù)制后替換為“[T/]”,這樣題干部分就處理完畢。對(duì)于答案部分則查找第一個(gè)“2、”,光標(biāo)移到行頭輸入“[D]”,然后將剛才復(fù)制的答案粘貼,接著輸入“[D/]”,最后利用代碼回車,將后續(xù)的部分換行。如圖8所示,紅框中為判斷題1。其余各題也是相同處理,最后將所有“[D](”替換為“[D]”,“)[D/]”替換為“[D/]”,“A-A-@”替換為輸入的標(biāo)識(shí)“A-A-001”。最后每道題后面加空格行,多選題的答案中每個(gè)字母間加逗號(hào),就完成了轉(zhuǎn)化,加逗號(hào)代碼的部分代碼如下(兩個(gè)多選的情況)。
Selection.MoveRight unit:=wdCharacter, Count:=10……光標(biāo)向右移動(dòng)10個(gè)字符
With Selection
If .Characters(1).Information(wdFirstCharacterColumnNumber) = 1 Then……如果光標(biāo)移到下行首
Selection.MoveUp wdParagraph, 1……上移到答案行
Selection.HomeKey unit:=wdLine
Selection.MoveRight unit:=wdCharacter, Count:=4……光標(biāo)右移四個(gè)字符到兩個(gè)答案中間
Selection.TypeText Text:=","……加入逗號(hào)
B = 1……改變標(biāo)識(shí)符的值
ElseIf B = 0 Then……否則的話
Selection.HomeKey unit:=wdLine[1]……光標(biāo)移到答案行首
Selection.MoveRight unit:=wdCharacter, Count:=11……向右移動(dòng)11個(gè)字符,后面代碼將判斷答案是否為3個(gè)多選的情況,與這段代碼類似,在此篇幅限制,讀者自己舉一反三
End If
End With
圖7 標(biāo)識(shí)輸入框
圖8 判斷題轉(zhuǎn)化過(guò)程
在轉(zhuǎn)化過(guò)程中由于程序是標(biāo)準(zhǔn)化執(zhí)行,也會(huì)遇到轉(zhuǎn)化格式失敗的例子,以下將失敗原因和解決方法提出來(lái)給讀者參考。
1) 由于程序是判斷全角括號(hào),有些括號(hào)由于出題者的原因使用的是半角括號(hào),會(huì)使得程序找括號(hào)出現(xiàn)錯(cuò)誤導(dǎo)致格式轉(zhuǎn)化失敗。解決方法是將出題者給與的原始文檔中搜尋半角括號(hào),然后全部替換為全角括號(hào)。
2) 有時(shí)候出題者會(huì)在一道題中放兩個(gè)括號(hào),導(dǎo)致括號(hào)定位失敗而格式混亂。解決方法是將其中一個(gè)括號(hào)去掉,轉(zhuǎn)化完成后再添加上。
3) 也有的題轉(zhuǎn)化格式失敗是由于出題者疏忽,沒(méi)有在多選題中添加第五個(gè)答案,導(dǎo)致程序?qū)Α癊、”定位失敗。解決方法是在轉(zhuǎn)化之前注意查看多選題是否有五個(gè)答案。
在實(shí)際運(yùn)行的過(guò)程中,我們要先找例題調(diào)試,確保程序運(yùn)行穩(wěn)定,最后我們把設(shè)計(jì)好的宏的快捷啟動(dòng)方式添加到快速工具訪問(wèn)欄上(如圖9所示)。在實(shí)際使用的過(guò)程中,點(diǎn)擊對(duì)應(yīng)的按鈕,宏程序就能快速開始工作,極大地簡(jiǎn)化了啟動(dòng)流程,實(shí)現(xiàn)一鍵格式轉(zhuǎn)化。
圖9 宏快捷鍵
宏程序編輯中也會(huì)遇到代碼不懂的問(wèn)題,我們可以充分利用微軟提供的錄制宏的功能,將所需功能利用此功能轉(zhuǎn)化為代碼添加到程序中,當(dāng)然,并不是所有的代碼都能夠利用錄制功能得到,要多參考別的VBA編程例子和書籍。本程序的應(yīng)用并沒(méi)有涉及到比較復(fù)雜的循環(huán)嵌套之類的語(yǔ)句,只有在多選題的答案中加逗號(hào)時(shí)使用了IF語(yǔ)句判斷加逗號(hào)的幾種情況,總體上是所用的代碼范圍較廣但是難度不大,讀者要根據(jù)自己實(shí)際的應(yīng)用,利用IF、do while等語(yǔ)句判斷各種情況,程序設(shè)計(jì)完成也要注意找例子進(jìn)行調(diào)試,確保程序能夠?qū)崿F(xiàn)預(yù)先設(shè)計(jì)的功能。
[1] 楊曉亮.Word VBA高效排版范例應(yīng)用[M].北京:中國(guó)青年出版社,2005.
[2] 李桂成,張永奎,閏銳.Word操作題自動(dòng)閱卷的設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)工程與設(shè)計(jì),2002,23(4):55-57.
[3] 林群英.自動(dòng)出卷評(píng)分系統(tǒng)的實(shí)現(xiàn)[J].湖南工業(yè)職業(yè)技術(shù)學(xué)院學(xué)報(bào),2003,3(1):26-28.
[4] 林丕源,黃葵英.Word2000中文版操作技巧與應(yīng)用實(shí)例[M].北京:電子科技大學(xué)出版社,2000.
Application of Word Macro in Shanxi Province Professional Skills Proposition Database
Li Xiaohu
(ShanxiAdministrationCenterofRadioandTV,TaiyuanShanxi030001,China)
Visual Basic for Applications (VBA) is a macro language which is developed by Microsoft in its desktop application to perform the task of general automation (OLE) programming language. This article uses the word macro to edit a format conversion program and rapidly convert the proposition of teacher's questions to the format which can be identified by test software. The paper mainly discusses the application of design thinking as well as a variety of auxiliary method. Finally, it uses the macro program to smoothly complete the format conversion and quickly complete the test task that saves a lot of time.
VBA; macro; word format; the question bank format
2016-08-22
李小虎(1986- ),男,山西人,助理工程師,碩士,主要研究方向:無(wú)線發(fā)射。
1674- 4578(2016)06- 0054- 03
TP 317.2
A