第二章 VBA代碼保存和運行環(huán)境
第一節(jié)VBE環(huán)境
2.1 如何編寫、存放和運行代碼
2.1.1 VBE簡介
也許有的讀者從第一章的內(nèi)容中已經(jīng)知曉,在運用VBA進行工作時,需要在Excel表格中進入VBE。那么,什么是VBE呢?VBE全寫為Visual Basic Editor,是微軟公司為Visual Basic程序編寫和運行而開發(fā)的一個集成環(huán)境,在這個環(huán)境中,可以對VBA代碼進行編輯,包括代碼鍵入、復(fù)制、修改、等。
2.1.2如何進入VBE界面
在Excel中進入VBE的方法是:打開Excel表格,然后按下Alt鍵和F11鍵,將彈出VBE窗口,圖2.1顯示了VEB默認窗口。
圖2.1 VBE窗口
VBE界面簡介
2.1.2.1 VBE界面由菜單、工具欄、幫助窗口、資源管理器、屬性窗口組成。
2.1.2.2 菜單窗口:大部分VBA程序的運行、編譯和調(diào)試均可在菜單欄中實現(xiàn)。
2.1.2.3 資源管理器:可以查看、打開、關(guān)閉目前VBA項目所設(shè)計的工作簿、工作表等。
2.1.2.4 屬性窗口:顯示和修改目前選定對象的屬性,在界面設(shè)計一章中,將專門講解利用屬性窗口美化界面的方法。
2.2 模塊和類模塊
2.2 模塊:
模塊就是為了一系列相同或者相似,彼此之間有邏輯聯(lián)系的問題而設(shè)定的一個整體的“過程”可以人為地給這個“過程”添加一些功能,在VBE中進行編輯時,一般情況下,需要插入一個或者多個模塊。通常情況下,將一段具有某種功能的VBA程序編寫到一個特定的模塊中,就可以編譯運行該程序了。
2.2.1 如何插入模塊
進入VBE界面以后,點擊菜單欄中的“插入”,然后再點擊“模塊”,就可以插入一個模塊了,插入模塊以后的VBE界面如下:
圖2.2 插入模塊后的VBE
插入模塊后,VBE自動建立模塊代碼窗口(當前鼠標閃爍位置)在這個代碼窗口中輸入特定的VBA代碼,就可以提運行了。
2.2.2 如何在模塊中編寫代碼
插入模塊后就可以在其中編寫代碼,編寫代碼一般可以采用直接寫入或者復(fù)制的方式進行
2.3 類模塊
與模塊不同,類模塊并不是為解決某一個具體的問題而設(shè)計的,而是為了某一類問題而設(shè)計的某種“通用”的模板,或者獨立于模塊而存在,為模塊所調(diào)用的一些基層的功能或者函數(shù)。類模塊這一部分將在第9章進行詳細的講解。
第二節(jié) 過程和函數(shù)
VBA的前身是宏(Macro),關(guān)于宏的相關(guān)知識,有興趣的讀者可以自己尋找相關(guān)的材料進行了解,這里只需要記住一點,VBA中定義的過程的過程名就是宏名稱,即可。
2.1過程
前面已經(jīng)提到了過程一詞。在VBA中,過程可以理解為“為了達到某一個具體工作目的而編寫的一小段具有完整功能的VBA代碼“
與插入模塊和類模塊相似,VBA中需要用相應(yīng)的代碼來定義一個過程,VBA中定義過程的格式為:
[Private | Public | Friend] [Static] Sub {Name} ([Arglist])
[Statements]
[Exit Sub]
[Statements]
End Sub
下面一一講解這些最基礎(chǔ)單元的意義以及用法
(1)總原則:在上述格式中,中括號”[]”中的部分可以這個部分為可選項,即在VBA過程中這個部分可以省略。帶有豎線”|”的部分表示三個選項中可以選擇其中的一個(最多選擇一個選項,這3個選項,即Private、Public、Friend將在后面的章節(jié)中做詳細介紹)。花括號“{}”里面的部分表示,這一部分內(nèi)容必不可少,但是可以用任意的字母或者任意的字母、數(shù)字、下劃線組合。
(2) [Private | Public | Friend] 這一部分指定這個過程可以運用的范圍,當使用Private時,表示這個“過程”是“私有”的,即只有當前的窗體或者同一模塊中口語調(diào)用這個過程,Public時,表示“公共”的,即這個過程可以被任何窗體或者模塊調(diào)用,選擇Friend時,表示過程為“友員”過程,所有的“友員”模塊或者窗體可以調(diào)用。
(3) [Static] 這個選項為變量的生命周期變量,每一次運行該過程時,如果過程中的變量想使用上一次運行過程后的變量的數(shù)值,則可以添加該選項。
(4) Sub 申明過程的關(guān)鍵詞,這個不可以缺少,也不可以修改。
(5) {Name} 過程名稱,這一部分用戶可以自己使用任何符合規(guī)定的名稱,名稱可以使用英文字母、數(shù)字或者下劃線,以及其任意組合。但是不可以使用空格、引號、感嘆號等符號。
(6) ([Arglist]) 這一部分指明過程所需要的參數(shù),過程可以沒有參數(shù),但是不可以省略兩邊的小括號,即“()”。所謂的參數(shù),就是一個過程在運行的時候,需要外界向這個過程提供的一些信息,這些信息獨立于過程而存在,又是過程執(zhí)行中所需要的。
(7) [Statements] 過程執(zhí)行的語句段,根據(jù)過程的需要,這些語句段由用戶自行編寫,可以只有一段,也可以有許多段。
(8) [Exit Sub] 在執(zhí)行語句段時,根據(jù)特殊的需要的特別的情況,提前結(jié)束整個過程。
(9)End Sub 表示過程結(jié)束,即整個過程執(zhí)行完成。
2.2 函數(shù)
與過程相同的是,函數(shù)也是為了實現(xiàn)某一個具體的任務(wù)而編寫的一個具有完整功能的語句段(代碼)。與過程不同的是,(1)過程和函數(shù)都可以調(diào)用函數(shù),函數(shù)卻不可以調(diào)用過程。(2)在Excel單元格中可以使用函數(shù),卻不可以直接使用過程。(3)函數(shù)具有具體的返回值,過程沒有返回值。
VBA中,對于函數(shù)的定義格式為:
[Private | Public | Friend] [Static] Function {Name} ([Arglist]) [As Type]
[Statements]
[Exit Function]
[Statements]
End Function
(1)總則:參見1.1.4.1過程,這里的原則和過程定義時一致。
(2) [Private | Public | Friend] 指定該函數(shù)可以被調(diào)用的范圍,意義與過程定義一致。
(3) [Static] 指定該函數(shù)調(diào)用時變量是否采用Static形式,意義與過程一致。
(4) Function 定義函數(shù)的關(guān)鍵字,不可缺少,不可更改。
(5) {Name} 函數(shù)名稱,用戶可以任意命名,命名原則同過程名的命名。
(6) ([Arglist]) 函數(shù)的參數(shù),這一部分可以沒有,也可以有很多種形式,后面將這一部分的語法詳細解釋。
(7) [As Type] 設(shè)定函數(shù)的返回值的類型。這一部分內(nèi)容,請讀者在了解了第三章變量以后自行領(lǐng)悟。
(8) [Statements] 函數(shù)具體功能的實現(xiàn),用戶根據(jù)自己具體需要進行編寫。
(9) [Exit Function] 根據(jù)特殊情況,提前結(jié)束函數(shù)的執(zhí)行過程。
(10) End Function 函數(shù)執(zhí)行完畢
(11) [Arglist] 部分語法:[Optional] [ByVal | ByRef] [ParamArray] {VarName} [()] [As Type] [=defaultvalue]
這一部分語法解釋如下:
(12) [Optional] 表示這個參數(shù)為可選參數(shù),函數(shù)在執(zhí)行時,一般情況下可以不用這個參數(shù),該參數(shù)可以起到改變函數(shù)功能的作用,此時可以選擇用Optional命令。
(13) [ByVal | ByRef] 函數(shù)參數(shù)的傳遞方式,ByVal為數(shù)值傳遞,ByRef為地址傳遞,兩者的區(qū)別請閱讀函數(shù)相關(guān)的章節(jié)。
(14) [ParamArray] 函數(shù)的參數(shù)個數(shù)不確定,用參數(shù)數(shù)組的形式參與運算。
(15) {VarName} 參數(shù)名稱,即函數(shù)需要的參數(shù)的名稱,這一部分命名原則和函數(shù)名稱命名一致。
(16) [As Type] 參數(shù)的類型,即參數(shù)的變量類型。這一部分也將在變量一章中進行解釋。
(17) [=defaultvalue] 指定參數(shù)的默認數(shù)值,即忽略參數(shù)時或者參數(shù)可選時,這個參數(shù)的默認數(shù)值。
第三節(jié) 運行第一個簡單代碼
終于可以運行第一個簡單代碼了!我們來看一看運行代碼的具體過程是怎樣的。
2.3.1 進入Excel VBE界面
打開Excel表格,按下Alt F11快捷鍵,進入VBE界面
2.3.2 插入模塊
點擊VBE界面菜單欄中的“插入”按鈕,然后選擇“模塊”
2.3.3 敲入代碼
敲入“sub Show()”,并按下回車鍵。注意到,當按下回車后,VBE自動將這一段改為:
Sub Show()
End Sub
并且光標自動停止在Sub和End Sub之間,從這里,我們可以看出,VBE界面比我們想象中更加的有好強大,其可以自己對用戶輸入的部分進行修改
2.3.4 繼續(xù)錄入完整的代碼
Sub Show()
MsgBox Now
End Sub
2.3.5 運行代碼
在錄入完整代碼后,可以嘗試運行一下代碼,在VBE中,運行代碼的方法有
(1)在VBE界面中直接按下運行按鈕運行按鈕為一個綠色的三角形
圖 2.3 運行按鈕
(2)在VBE界面中按下F5快捷鍵
(3)關(guān)閉VBE,回到Excel,按下Alt F8快捷鍵,然后點擊“執(zhí)行”
(4)在Excel中插入按鈕控件,然后將控件與編寫的宏名稱相關(guān)聯(lián),插入控件以及關(guān)聯(lián)宏的方法將在第10章界面設(shè)計中詳細講述。
第四節(jié) 注釋以及Excel的保存形式
2.4.1 注釋
在VBA代碼中,允許插入一段或者若干段解釋代碼作用的文字,這樣的文字叫做注釋,給代碼加注釋的作用,好比如學生做的課堂筆記,對于以后代碼的維護起到關(guān)鍵性的作用,在學習編寫VBA程序的過程中,給VBA程序編寫注釋是一個很好的習慣,由于在本書中,已經(jīng)在一段程度的后面通過文字的方法對程序進行了說明,因此程序中不再加入注釋的部分。在VBA編輯環(huán)境中,加入注釋的方法是在需要注釋的開頭加上一個單引號“’”或者使用關(guān)鍵字Rem,再加上注釋的內(nèi)用。注釋的內(nèi)用并不參與命令和程序的編譯,只是給程序的編寫者或者相關(guān)人員閱讀程序提供方便。
在使用單引號的方式加入注釋時,單引號可以出現(xiàn)在這一行的任意位置,單引號后面的內(nèi)用(即與單引號后面同一行的內(nèi)容)會被認為是注釋的內(nèi)容。使用Rem關(guān)鍵字加入注釋時,Rem關(guān)鍵字只可以出現(xiàn)在一行的首位置,這一行的所有內(nèi)容都會被當作注釋內(nèi)容。注釋的部分內(nèi)容會被VBE環(huán)境表示為綠色。
圖2.4 注釋
2.4.2 Excel保存的格式
在一段VBA編寫完成后,需要對Excel表格進行保存,在保存格式中,一般選擇xls格式,這是因為:
(1)在Excel 2007之前的版本,保存格式為xls。保存問xls時,可以兼顧對VBA代碼的保存以及兼容低版本Excel。
(2)保存為xlsx格式時,不能兼顧對VBA代碼和宏的保存,為了保存VBA代碼以及宏,Excel 2007之后的版本需要保存成xlsm的格式。而低版本的Excel(Excel 2003版本)不能打開xlsm格式文件。