VBA指令、工程命名及過程

2021-06-16 09:21 更新

在前面的學(xué)習(xí)中,你學(xué)習(xí)到了Excel宏錄制器創(chuàng)建的一系列指令是和你實際進(jìn)行的操作完全等同的。這些指令自動地放在工作簿里一個叫做“模塊”的表里。Excel將模塊儲存在模塊文件夾里,這個文件夾在當(dāng)前工作簿,新工作簿或者個人宏工作簿里面。你必須激活VB編輯器窗口,并且雙擊工程瀏覽器里的模塊文件夾才能查看到這些模塊。當(dāng)模塊表在代碼窗口里打開了后,你才能最后分析你的過程代碼。


所有錄制的指令都包括在“過程”里面。過程里面的每一行都是一個“指令”。指令的類型有很多種,例如,關(guān)鍵詞,運算符,或者其它過程的調(diào)用?!瓣P(guān)鍵詞”代表VB中的一個特殊的意義。你已經(jīng)學(xué)習(xí)了最常見的VBA關(guān)鍵詞——Sub 和EndSub,它們表示一個過程的開始和結(jié)束。關(guān)鍵詞默認(rèn)地顯示為藍(lán)色。你不要將這些術(shù)語做其它的目的,因為關(guān)鍵詞已經(jīng)被VB保護(hù)了。


除了關(guān)鍵詞,VB指令里還可以有運算符。運算符有四種類型:算術(shù)運算,字符串連接,邏輯運算和比較運算?!斑\算符”允許你將某些值結(jié)合起來。例如,除號運算符(/)可以用來計算總數(shù)的百分比。本手冊中,你有很多機(jī)會看到如何在VBA過程中使用運算符。


VB指令的另外一種類型是過程調(diào)用。過程調(diào)用讓你快速地跳到其它過程并且執(zhí)行其它指令。是不是很難想象?讓我們看一下你在第一章中錄制的宏WhatsInACell。 假設(shè)你也需要包含同一模塊中宏FormulasOnOff中的一些語句。怎么做呢?你可以復(fù)制需要的代碼行,再粘貼過去。然而,有一種更簡單快速的方法。你可以調(diào)用這個過程,而不需要在兩個過程中復(fù)制。例如,你想VB在遇到指令MsgBox "所有操作都已完成"之前執(zhí)行宏FormulasOnOff里面的指令,只要添加下面一句代碼就行:


FormulasOnOff


當(dāng)VB到達(dá)這一行,它就會立即跳到FormulasOnOff過程并且執(zhí)行它的代碼。之后,它會回到宏WhatsInACell去執(zhí)行剩下的代碼,遇到關(guān)鍵詞End Sub時則停止。

在你嘗試這個例子之前,你必須學(xué)會如何給VBA過程和模塊命名,已經(jīng)如何調(diào)用不同工程里的過程。


VBA工程命名

工程是一套Excel對象,模塊,窗體和引用。除了VBAProject這個位于工程瀏覽器中工作簿名稱之前默認(rèn)名稱,每個工程需要一個獨特的名稱。我們來給VBAProject (Chap01.xls) 和 VBAProject(Personal.xls)命名:


1、啟動Excel,打開Chap01.xls,這里儲存了宏WhatsInACell代碼。你錄制了宏FormulasOnOff的個人宏工作簿會自動開啟


2、切換到VB編輯器窗口


3、選擇VBAProject (Chap01.xls)


4、雙擊屬性窗口里的名稱屬性,這個操作選中了默認(rèn)的工程名稱VBAProject


5、輸入“FirstSteps”作為該VBA工程的名稱,回車。注意,工程瀏覽器現(xiàn)在顯示的是名稱是

FirstSteps (Chap01.xls)


6、在工程瀏覽窗口選擇VBAProject (Personal.xls)


7、雙擊屬性里的名稱屬性


8、輸入“Personal”作為它的名稱,回車


技巧:避免名稱沖突
為了避免VBA工程之間的命名沖突,請給你的工程獨特的名稱。你可以使用下述方法之一來更改工程名稱:


1、在工程瀏覽器窗口,選擇工程名稱,雙擊屬性窗口里的名稱屬性,再輸入新的名稱


2、在工程瀏覽器窗口,在工程名稱上單擊右鍵,并且選擇“工程名稱屬性”。出現(xiàn)如下圖顯示的
工程屬性對話框,在工程名稱文本框里面輸入新的名稱


 工程屬性窗口

 工程屬性窗口可以用來更改當(dāng)前被選中的工程名稱和描述3模塊重命名


當(dāng)你錄制宏或者創(chuàng)建新的過程時,VB會創(chuàng)建一個模塊文件夾來儲存你的VBA 代碼。 第一個文件夾叫“模塊1”,第二個叫“模塊2”,等等。你打開一個新的工作簿并且創(chuàng)建VBA工程時,新VBA工程里的模塊文件夾又會命名為“模塊1”,“模塊2”,等等。模塊擁有相同的名稱不但對你,而且對VB造成很大混淆,因為,它要在一個打開許多工程的環(huán)境中執(zhí)行你的宏或工程。

為了避免模塊混淆,給FirstSteps(Chap01.xls) 工程和 Personal(Personal.xls)  工程里的“模塊1”重新命名:


1. 在工程瀏覽器窗口,選擇FirstSteps (Chap01.xls)工程,并且選擇“模塊1”


2. 雙擊屬性窗口里的名稱屬性,這個動作選中了模塊的默認(rèn)名稱“模塊1”


3. 輸入“WorksheetFormatting”作為模塊1的名稱,并且回車。注意,工程瀏覽器窗口現(xiàn)在顯示的模塊名稱是“WorksheetFormatting”


4. 在工程瀏覽器窗口選擇Personal (Personal.xls)


5. 雙擊屬性窗口里的名稱屬性


6. 輸入“Switches”作為模塊1的名稱,回車


模塊文件夾


從其它工程調(diào)用過程

你只要明確過程名稱,就可以調(diào)用這個在同一個工程里任何模塊里的過程。假設(shè)過程FormulasOnOff和宏WhatsInACell在同一個工程里的不同模塊(或者同一個模塊),在WhatsInACell宏里面調(diào)用過程FormulasOnOff,你所要做的所有工作只是明確過程名稱,示例如下:


Sub WhatsInACell()
            <這里是你錄制的指令>
            FormulasOnOff
End Sub

然而,如果兩個或者兩個以上的模塊含有這個相同的過程名稱,你除了要明確過程名稱外,還必須包括模塊名稱。假設(shè)工程FirstSteps  (Chap01.xls)有三個模塊。模塊FormulaFormatting包含宏WhatsInACell,但是,模塊Switches和模塊Formulas都含有一個叫FormulasOnOff的宏。如何在WhatsInACell調(diào)用FormulasOnOff(模塊Switches里面的)?請看下面例子:


Sub WhatsInACell()
            <這里是你錄制的指令>
            Switches.FormulasOnOff
End Sub

要調(diào)用其它工程里的過程,你必須建立對該工程的引用。你可以在“引用”對話框進(jìn)行這些操作。因為FormulasOnOff在Personal(Personal.xls)工程里,在你能夠從WhatsInACell調(diào)用它之前,你需要添加對“Personal”的引用。下面是幾種建立引用的方法:


1. 在工程瀏覽器窗口,點擊FirstSteps (Chap01.xls)


2. 選擇“工具”-“引用”


3. 在引用對話框,選中“Personal”旁邊的勾選框,如下圖所示。然后點擊確定(在截圖前,我并沒有保存Personal,所以在附圖里沒有Personal一行,如果你依照手冊中一步一步走下來,應(yīng)該沒有問題)


引用對話框

引用對話框列出了所有這個工程可以引用的工程。如果你想要執(zhí)行其它工程里的過程,你就必須建立對這個工程的引用


既然對“Personal”工程的引用已經(jīng)建立了,我們就來從WhatsInACell里調(diào)用FormulasOnOff吧。


1. 在工程瀏覽器窗口,選擇FirstSteps (Chap01.xls)并且定位到含有WhatsInACell的模塊


2. 在MsgBox "所有操作都已完成"之前增加一空白行,并且輸入代碼:FormulasOnOff


3. 返回到Excel界面,確保當(dāng)前工作表是這個例子數(shù)據(jù)


4. 使用任何你在第一章里學(xué)到的方法來運行宏WhatsInACell


如果你給兩個不同工程里的不同過程以相同的名稱,那么你必須明確工程名稱才能調(diào)用它。


我們假設(shè)FirstSteps (Chap01.xls)工程和Personal (Personal.xls) 工程里都有叫FormulasOnOff的宏,要調(diào)用Personal  (Personal.xls)工程里的FormulasOnOff(記住,你已經(jīng)必須先建立對Personal的引用),必須包括工程名稱:


Sub WhatsInACell ( )
            <這里是你錄制的指令>
            Personal.Switches.FormulasOnOff
End Sub


技巧:VB如何定位被調(diào)用的過程
當(dāng)你調(diào)用一個過程,VB先在主調(diào)方(WhatsInACell)的同一個模塊里查找。如果沒有找到被調(diào)過程(FormulasOnOff),VB就會在同一個工程的其它模塊里查找。如果還是找不到,VB則會檢查對其它工程的引用。


技巧:工程名稱不在引用對話框
如果你想要調(diào)用一個當(dāng)前關(guān)閉的工程里的過程,當(dāng)你打開引用對話框試圖建立引用時,這個過程名稱不在清單中。點擊“瀏覽”,并且打開被調(diào)用過程所在的文件夾。添加引用的對話框默認(rèn)地列出數(shù)據(jù)庫文件(*.olb, .tlb, .dll)。從文件類型的下拉清單中選擇Excel文件(*.xls, *.xla),選擇并打開含有你要調(diào)用過程的文件。這個工程的名稱將會加在引用對話框的最后一行。


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號