吳有恒,孫永順,吳世美
(1.貴州省貴陽市氣象局,貴州 貴陽 550001;2.貴州省三穗縣氣象局,貴州 三穗 556500)
VBA是Visual Basic For Application的簡稱,也叫做宏程序,是建立在Office中的一種應(yīng)用程序開發(fā)工具。通過編寫代碼,使Excel顯示我們想要的計(jì)算結(jié)果,對于新建相同樣式的表格只需通過宏錄制功能便能使Excel自動生成,無需浪費(fèi)時(shí)間去重復(fù)設(shè)計(jì),在VB編輯器中還提供了可視化的窗體設(shè)計(jì)功能,只需拖動相應(yīng)的控件到想要放置的位置上,再編寫相關(guān)事件,一個(gè)簡單的窗體便產(chǎn)生了。筆者通過實(shí)現(xiàn)工作中用到的歷年日均氣溫月標(biāo)準(zhǔn)差的自動計(jì)算來擴(kuò)展VBA編程能力。
打開Excel文件,使用快捷鍵Alt+F11即可調(diào)出VB編輯器,在編輯器左上角的工程資源管理窗口中點(diǎn)擊鼠標(biāo)右鍵新建標(biāo)準(zhǔn)模塊,模塊即是編寫程序代碼的一個(gè)框架,通過在其中創(chuàng)建Sub子過程來實(shí)現(xiàn)算法。
月地面氣象資料格式文件(A文件)按一定順序存放著該月各氣象要素?cái)?shù)據(jù),通過Open語句打開A文件并存放在Open語句分配的緩沖區(qū)內(nèi)供文件進(jìn)行輸入或輸出操作,下面是讀取A文件氣溫并求日平均的值的語句(中文部分是注釋):




打開Excel,選擇“工具”→“宏”→“錄制新宏”打開錄制窗口,借助宏錄制功能設(shè)計(jì)表格樣式、字體大小等,錄制完成后生成的代碼會保存在VB編輯器的模塊中。讀取A文件氣溫?cái)?shù)據(jù)計(jì)算得到的日平均值要在生成的表格中按順序存放,如圖1。

圖1 各年日平均氣溫及月標(biāo)準(zhǔn)差表
在表的最后一行是日平均氣溫的月標(biāo)準(zhǔn)差,Excel中有直接計(jì)算樣本標(biāo)準(zhǔn)差的公式,以1月為例在程序中加入代碼Range("B35").FormulaR1C1="=STDEV(R[-32]C:R[-2]C)",該語句表示B35這個(gè)單元格使用公式STDEV計(jì)算從第3行(R[-32]表示35-32=3)到第33行(R[-2]表示35-2=33)的樣本標(biāo)準(zhǔn)差。對于新建如圖1的其余年份的表格,只需把生成表格樣式的代碼放到循環(huán)語句中便能自動生成。
在求日平均氣溫月標(biāo)準(zhǔn)差的30 a均值時(shí)新建如圖2的表格。
為方便查看各年日平均氣溫及月標(biāo)準(zhǔn)差,在該表的A列創(chuàng)建訪問相應(yīng)年份的超鏈接,需要用到Hyperlinks對象的Add方法,即超鏈接的添加方法,以代碼中的語句為例:


圖2 歷年日平均氣溫月標(biāo)準(zhǔn)差及均值表
"跳轉(zhuǎn)到"&Sheets("各年日平均氣溫月標(biāo)準(zhǔn)差及30 a均值").Name,TextToDisplay:="返回目錄"
該句中Anchor:=.Range("A2")表示設(shè)置A2單元格為超鏈接;Address:=""表示無引用外部文件或訪問網(wǎng)址的鏈接;SubAddress:="目錄"表示引用本工作薄內(nèi)名為“目錄”的區(qū)域;ScreenTip:="跳轉(zhuǎn)到"&Sheets("各年日平均氣溫月標(biāo)準(zhǔn)差及30 a均值").Name表示當(dāng)鼠標(biāo)移動到A2單元格時(shí)會提示“跳轉(zhuǎn)到各年日平均氣溫月標(biāo)準(zhǔn)差及30 a均值”;TextToDisplay:="返回目錄"表示在A2單元上顯示“返回目錄”,如圖1中A2單元格的藍(lán)色字體所示。
在VB編輯器中通過插入用戶窗體,設(shè)計(jì)了3個(gè)文本框用于獲取區(qū)站號、開始年份和結(jié)束年份,通過傳遞用戶輸入的數(shù)據(jù)改變A文件名,使得日平均氣溫月標(biāo)準(zhǔn)差的計(jì)算同樣適用于其他臺站,而且開始和結(jié)束年份不固定可以任意輸入,但是對于文本框輸入內(nèi)容都有條件限定,區(qū)站號只允許輸入5位數(shù)字,開始和結(jié)束年份只允許輸入4位數(shù)字,因?yàn)檠職v史數(shù)據(jù)用的都是近30 a的氣候資料,所以年份間隔必須為30 a,輸入錯誤會彈出消息框要求重新輸入,區(qū)站號和年份輸入正確后會提示“確保所有的A文件都放置在D:OSSMO 2004ReportFile下”,該目錄也是測報(bào)軟件默認(rèn)存放A文件的路徑。
最后點(diǎn)擊上圖中計(jì)算按鈕后便會呈現(xiàn)如圖1、圖2所示樣式的31張表格。

圖3 計(jì)算器界面
使用Excel內(nèi)置的VB編輯器編寫宏程序計(jì)算歷年日平均氣溫月標(biāo)準(zhǔn)差雖然只是實(shí)現(xiàn)了旬月歷史數(shù)據(jù)中的一項(xiàng),但通過此次編程實(shí)踐提升了解決工作問題的能力,對于其他歷史數(shù)據(jù)只需對代碼做相應(yīng)改動即可實(shí)現(xiàn)。之所以選擇使用VBA還在于Office辦公軟件的普及,它能引導(dǎo)Excel創(chuàng)建自動化操作并快速處理數(shù)據(jù),實(shí)現(xiàn)很多Excel基本功能所不能實(shí)現(xiàn)的功能。最后還需說明的是宏的運(yùn)行,打開“工具”→“宏”→“安全性”,只需選擇中級即可,之后在打開本文所示已寫好宏程序的Excel文檔時(shí),點(diǎn)擊“啟用宏”便會彈出圖3對話框。
[1]韓小良,韓舒婷.Excel VBA高效辦公實(shí)用寶典[M].北京:中國鐵道出版社,2008.
[2]黃世芹,王珺.VB編程環(huán)境下如何調(diào)用和生成EXCEL文檔[J]. 貴州氣象,2010,34(2):38-39.