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