VBA學(xué)習(xí)教程_第二章_第1頁(yè)
VBA學(xué)習(xí)教程_第二章_第2頁(yè)
VBA學(xué)習(xí)教程_第二章_第3頁(yè)
VBA學(xué)習(xí)教程_第二章_第4頁(yè)
VBA學(xué)習(xí)教程_第二章_第5頁(yè)
已閱讀5頁(yè),還剩21頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、第二章 VBA 第一步作者:Julitta Korol 翻譯:Tiger Chen Nov 28 2004語(yǔ)言學(xué)習(xí)是一個(gè)長(zhǎng)期的活動(dòng),在此過(guò)程中,你會(huì)經(jīng)歷不同的階段,由生疏到熟悉。學(xué)習(xí)VBA編程也是一樣的,沒(méi)有捷徑。要想精通VBA,你必須從一個(gè)初級(jí)階段起步(第二至四章)。只有當(dāng)你對(duì)VBA后面的一些基本的東西有了很好的理解之后,才能提高到中級(jí)階段(第五至七章)和高級(jí)階段(第八至十七章)。但是,重要的事情先來(lái)。在你能夠用VBA自由自在地控制Excel之前,你需要獲得一些你的術(shù)語(yǔ)和語(yǔ)法。在VB里,如何表達(dá)這些?“在工作簿里添加一個(gè)新工作表”,“刪除單元格A5的內(nèi)容”,“將單元格A1的公式復(fù)制到單元格B

2、1”?你也許知道這些單個(gè)的詞語(yǔ),然而,你怎么知道如何將它們正確地組合在一起,Excel才能執(zhí)行這些任務(wù)?你將在本章中學(xué)習(xí)VBA的術(shù)語(yǔ)和規(guī)則。了解指令,模塊和過(guò)程在第一章,你學(xué)習(xí)到了Excel宏錄制器創(chuàng)建的一系列指令是和你實(shí)際進(jìn)行的操作完全等同的。這些指令自動(dòng)地放在工作簿里一個(gè)叫做“模塊”的表里。Excel將模塊儲(chǔ)存在模塊文件夾里,這個(gè)文件夾在當(dāng)前工作簿,新工作簿或者個(gè)人宏工作簿里面。你必須激活VB編輯器窗口,并且雙擊工程瀏覽器里的模塊文件夾才能查看到這些模塊。當(dāng)模塊表在代碼窗口里打開(kāi)了后,你才能最后分析你的過(guò)程代碼。所有錄制的指令都包括在“過(guò)程”里面。過(guò)程里面的每一行都是一個(gè)“指令”。指令的類(lèi)

3、型有很多中,例如,關(guān)鍵詞,運(yùn)算符,或者其它過(guò)程的調(diào)用?!瓣P(guān)鍵詞”代表VB中的一個(gè)特殊的意義。在第一章中,你學(xué)習(xí)了最常見(jiàn)的VBA關(guān)鍵詞Sub 和End Sub,它們表示一個(gè)過(guò)程的開(kāi)始和結(jié)束。關(guān)鍵詞默認(rèn)地顯示為藍(lán)色。你不要將這些術(shù)語(yǔ)做其它的目的,因?yàn)殛P(guān)鍵詞已經(jīng)被VB保護(hù)了。除了關(guān)鍵詞,VB指令里還可以有運(yùn)算符。運(yùn)算符有四種類(lèi)型:算術(shù)運(yùn)算,字符串連接,邏輯運(yùn)算和比較運(yùn)算?!斑\(yùn)算符”允許你將某些值結(jié)合起來(lái)。例如,減號(hào)運(yùn)算符(/)可以用來(lái)計(jì)算總數(shù)的百分比。本書(shū)中,你有很多機(jī)會(huì)看到如何在VBA過(guò)程中使用運(yùn)算符。VB指令的另外一種類(lèi)型是過(guò)程調(diào)用。過(guò)程調(diào)用讓你快速地跳到其它過(guò)程并且執(zhí)行其它指令。是不是很難想象

4、?讓我們看一下你在第一章中錄制的宏WhatsInACell。 假設(shè)你也需要包含同一模塊中宏FormulasOnOff中的一些語(yǔ)句。怎么做呢?你可以復(fù)制需要的代碼行,再粘貼過(guò)去。然而,有一種更簡(jiǎn)單快速的方法。你可以調(diào)用這個(gè)過(guò)程,而不需要在兩個(gè)過(guò)程中復(fù)制。例如,你想VB在遇到指令MsgBox "所有操作都已完成"之前執(zhí)行宏FormulasOnOff里面的指令,只要添加下面一句代碼就行:FormulasOnOff當(dāng)VB到達(dá)這一行,它就會(huì)立即跳到FormulasOnOff過(guò)程并且執(zhí)行它的代碼。之后,它會(huì)回到宏WhatsInACell去執(zhí)行剩下的代碼,遇到關(guān)鍵詞End Sub時(shí)則停止

5、。在你嘗試這個(gè)例子之前,你必須學(xué)會(huì)如何給VBA過(guò)程和模塊命名,已經(jīng)如何調(diào)用不同工程里的過(guò)程。VBA工程命名工程是一套Excel對(duì)象,模塊,窗體和引用。除了VBAProject這個(gè)位于工程瀏覽器中工作簿名稱之前默認(rèn)名稱,每個(gè)工程需要一個(gè)獨(dú)特的名稱。我們來(lái)給VBAProject (Chap01.xls) 和 VBAProject (Personal.xls)命名:1. 啟動(dòng)Excel,打開(kāi)Chap01.xls,這里儲(chǔ)存了宏WhatsInACell代碼。你錄制了宏FormulasOnOff的個(gè)人宏工作簿會(huì)自動(dòng)開(kāi)啟2. 切換到VB編輯器窗口3. 選擇VBAProject (Chap01.xls)4.

6、雙擊屬性窗口里的名稱屬性,這個(gè)操作選中了默認(rèn)的工程名稱VBAProject5. 輸入“FirstSteps”作為該VBA工程的名稱,回車(chē)。注意,工程瀏覽器現(xiàn)在顯示的是名稱是FirstSteps (Chap01.xls)6. 在工程瀏覽窗口選擇VBAProject (Personal.xls)7. 雙擊屬性里的名稱屬性8. 輸入“Personal”作為它的名稱,回車(chē)技巧21 避免名稱沖突為了避免VBA工程之間的命名沖突,請(qǐng)給你的工程獨(dú)特的名稱。你可以使用下述方法之一來(lái)更改工程名稱:§ 在工程瀏覽器窗口,選擇工程名稱,雙擊屬性窗口里的名稱屬性,再輸入新的名稱§ 在工程瀏覽器窗口

7、,在工程名稱上單擊右鍵,并且選擇“工程名稱屬性”。出現(xiàn)如圖21顯示的工程屬性對(duì)話框,在工程名稱文本框里面輸入新的名稱圖21 工程屬性窗口可以用來(lái)更改當(dāng)前被選中的工程名稱和描述模塊重命名當(dāng)你錄制宏或者創(chuàng)建新的過(guò)程時(shí),VB會(huì)創(chuàng)建一個(gè)模塊文件夾來(lái)儲(chǔ)存你的VBA 代碼。 第一個(gè)文件夾叫“模塊1”,第二個(gè)叫“模塊2”,等等。你打開(kāi)一個(gè)新的工作簿并且創(chuàng)建VBA工程時(shí),新VBA工程里的模塊文件夾又會(huì)命名為“模塊1”,“模塊2”,等等。模塊擁有相同的名稱不但對(duì)你,而且對(duì)VB造成很大混淆,因?yàn)?,它要在一個(gè)打開(kāi)許多工程的環(huán)境中執(zhí)行你的宏或工程。為了避免模塊混淆,給FirstSteps (Chap01.xls) 工

8、程和 Personal (Personal.xls) 工程里的“模塊1”重新命名:1. 在工程瀏覽器窗口,選擇FirstSteps (Chap01.xls)工程,并且選擇“模塊1”2. 雙擊屬性窗口里的名稱屬性,這個(gè)動(dòng)作選中了模塊的默認(rèn)名稱“模塊1”3. 輸入“WorksheetFormatting”作為模塊1的名稱,并且回車(chē)。注意,工程瀏覽器窗口現(xiàn)在顯示的模塊名稱是“WorksheetFormatting”4. 在工程瀏覽器窗口選擇Personal (Personal.xls)5. 雙擊屬性窗口里的名稱屬性6. 輸入“Switches”作為模塊1的名稱,回車(chē)圖22 工程瀏覽器窗口顯示通過(guò)屬性

9、窗口給工程和模塊設(shè)置的獨(dú)特名稱從其它工程調(diào)用過(guò)程你只要明確過(guò)程名稱,就可以調(diào)用這個(gè)在同一個(gè)工程里任何模塊里的過(guò)程。假設(shè)過(guò)程FormulasOnOff和宏WhatsInACell在同一個(gè)工程里的不同模塊(或者同一個(gè)模塊),在WhatsInACell宏里面調(diào)用過(guò)程FormulasOnOff,你所要做的所有工作只是明確過(guò)程名稱,示例如下:Sub WhatsInACell() <這里是你錄制的指令> FormulasOnOff End Sub 然而,如果兩個(gè)或者兩個(gè)以上的模塊含有這個(gè)相同的過(guò)程名稱,你除了要明確過(guò)程名稱外,還必須包括模塊名稱。假設(shè)工程FirstSteps (Chap01.x

10、ls)有三個(gè)模塊。模塊FormulaFormatting包含宏WhatsInACell,但是,模塊Switches和模塊Formulas都含有一個(gè)叫FormulasOnOff的宏。如何在WhatsInACell調(diào)用FormulasOnOff(模塊Switches里面的)?請(qǐng)看下面例子:Sub WhatsInACell() <這里是你錄制的指令> Switches.FormulasOnOff End Sub 要調(diào)用其它工程里的過(guò)程,你必須建立對(duì)該工程的引用。你可以在“引用”對(duì)話框進(jìn)行這些操作。因?yàn)镕ormulasOnOff在Personal (Personal.xls)工程里,在你能

11、夠從WhatsInACell調(diào)用它之前,你需要添加對(duì)“Personal”的引用。下面是幾種建立引用的方法:1. 在工程瀏覽器窗口,點(diǎn)擊FirstSteps (Chap01.xls)2. 選擇“工具”“引用”3. 在引用對(duì)話框,選中“Personal”旁邊的勾選框(參見(jiàn)圖23),然后點(diǎn)擊確定(譯者:在截圖前,我并沒(méi)有保存Personal,所以在附圖里沒(méi)有Personal一行,如果你依照書(shū)中一步一步走下來(lái),應(yīng)該沒(méi)有問(wèn)題)圖23 引用對(duì)話框列出了所有這個(gè)工程可以引用的工程。如果你想要執(zhí)行其它工程里的過(guò)程,你就必須建立對(duì)這個(gè)工程的引用既然對(duì)“Personal”工程的引用已經(jīng)建立了,我們就來(lái)從Whats

12、InACell里調(diào)用FormulasOnOff吧。1. 在工程瀏覽器窗口,選擇FirstSteps (Chap01.xls)并且定位到含有WhatsInACell的模塊2. 在MsgBox "所有操作都已完成"之前增加一空白行,并且輸入代碼:FormulasOnOff3. 返回到Excel界面,確保當(dāng)前工作表是這個(gè)例子數(shù)據(jù)(參見(jiàn)第一章的圖11)4. 使用任何你在第一章里學(xué)到的方法來(lái)運(yùn)行宏WhatsInACell如果你給兩個(gè)不同工程里的不同過(guò)程以相同的名稱,那么你必須明確工程名稱才能調(diào)用它。我們假設(shè)FirstSteps (Chap01.xls)工程和Personal (Per

13、sonal.xls) 工程里都有叫FormulasOnOff的宏,要調(diào)用Personal (Personal.xls)工程里的FormulasOnOff(記住,你已經(jīng)必須先建立對(duì)Personal的引用),必須包括工程名稱:Sub WhatsInACell ( ) <這里是你錄制的指令> Personal.Switches.FormulasOnOff End Sub 技巧22 VB如何定位被調(diào)用的過(guò)程當(dāng)你調(diào)用一個(gè)過(guò)程,VB先在主調(diào)方(WhatsInACell)的同一個(gè)模塊里查找。如果沒(méi)有找到被調(diào)過(guò)程(FormulasOnOff),VB就會(huì)在同一個(gè)工程的其它模塊里查找。如果還是找不到,

14、VB則會(huì)檢查對(duì)其它工程的引用。技巧23 工程名稱不在引用對(duì)話框如果你想要調(diào)用一個(gè)當(dāng)前關(guān)閉的工程里的過(guò)程,當(dāng)你打開(kāi)引用對(duì)話框試圖建立引用時(shí),這個(gè)過(guò)程名稱不在清單中。點(diǎn)擊“瀏覽”,并且打開(kāi)被調(diào)用過(guò)程所在的文件夾。添加引用的對(duì)話框默認(rèn)地列出數(shù)據(jù)庫(kù)文件(*.olb, .tlb, .dll)。從文件類(lèi)型的下拉清單中選擇Excel文件(*.xls, *.xla),選擇并打開(kāi)含有你要調(diào)用過(guò)程的文件。這個(gè)工程的名稱將會(huì)加在引用對(duì)話框的最后一行。了解對(duì)象,屬性和方法使用VBA,你可以創(chuàng)建工程控制Excel的許多東西,你同樣也可以控制很多其它的應(yīng)用程序。VB的偉大來(lái)自于它的控制和管理各種各樣的對(duì)象的能力。但是,“

15、對(duì)象”是什么呢?“對(duì)象”是你通過(guò)VBA控制的東西。工作簿,工作表,工作表里的單元格區(qū)域,圖表或者工具條,這些只是一些用Excel時(shí)想要控制的東西的舉例。這些東西就是對(duì)象。Excel含有超出一百種你可以通過(guò)不同方式操作的對(duì)象。所有的VB對(duì)象都被分層規(guī)類(lèi)。一些對(duì)象本身又可能含有其它的對(duì)象,例如,Excel時(shí)一個(gè)應(yīng)用對(duì)象,這個(gè)應(yīng)用對(duì)象包含其它對(duì)象,例如工作簿或者命令條。工作簿對(duì)象可能包含其它對(duì)象,如工作表或者圖表。你將在本章種學(xué)習(xí)如何控制以下Excel對(duì)象:區(qū)域,窗口,工作表,工作簿和應(yīng)用。我將“區(qū)域”列在了第一位置,有一個(gè)非常重要的原因,如果你不知道如何操作單元格區(qū)域的話,你基本上不能用電子表格來(lái)

16、做什么。某些對(duì)象看上去相似。如果你打開(kāi)一個(gè)新工作簿,檢查它的工作表,你不會(huì)發(fā)現(xiàn)什么不同。一組相似的對(duì)象被稱為“集合”。例如,工作表的集合包含所有具體工作簿中的工作表;命令條的集合包含所有的工具條和菜單。集合同樣是對(duì)象。Excel中使用得最頻繁的集合是表(Sheets)集合,它代表所有的工作表和圖表,還有工作簿集合,工作表集合以及窗口集合。當(dāng)你使用集合時(shí),相同的動(dòng)作可以在這個(gè)集合中所有的對(duì)象上執(zhí)行。每一種對(duì)象都有一些特征供你描述。在VB里,這些對(duì)象的特征被稱為“屬性”。例如,工作簿對(duì)象有名稱屬性;區(qū)域?qū)ο笥辛?,字體,公式,名稱,行,樣式和值等屬性。這些對(duì)象屬性是可以設(shè)置的。你通過(guò)設(shè)置對(duì)象的屬性控

17、制對(duì)象的外觀和位置。對(duì)象屬性一次只能設(shè)置為一個(gè)特定的值。例如,當(dāng)前工作簿不可能同時(shí)有兩個(gè)不同的名稱。VB中最難理解的部分是有些屬性同時(shí)又可以是對(duì)象。想想?yún)^(qū)域(Range)對(duì)象,你可以通過(guò)設(shè)置字體顏色來(lái)改變選定單元格的外觀。但是,字體(Font)可以有不同的名稱(Times New Roman, Arial, ),不同的字號(hào)(10,12,14,)和不同的樣式(粗體,斜體,下劃線,)。這些是字體的屬性。如果字體有屬性,那么字體也是對(duì)象。屬性真是了不起,讓你改變對(duì)象的外觀,但是,如何控制這些操作呢?你在使Excel為你執(zhí)行任務(wù)之前,你需要知道另外一個(gè)術(shù)語(yǔ)。對(duì)象有方法。每一種你想要對(duì)象做的操作都被稱為

18、“方法”。最重要的VB方法是Add方法。你可以使用這個(gè)方法添加一個(gè)新工作簿或者工作表。對(duì)象可以使用不同的方法。例如,區(qū)域(Range)對(duì)象有專(zhuān)門(mén)的方法讓你清除單元格內(nèi)容(ClearContents方法), 清除格式(ClearFormats方法)以及同時(shí)清除內(nèi)容和格式(Clear方法)。還有讓你選擇,復(fù)制或移動(dòng)對(duì)象的方法。方法有可選擇的參數(shù)確定方法執(zhí)行的具體方式。例如,工作簿(Workbook)對(duì)象有一個(gè)叫關(guān)閉(Close)的方法。你可以使用它關(guān)閉任何打開(kāi)了的工作簿。如果工作簿有改動(dòng),Excel會(huì)彈出一個(gè)信息,問(wèn)你是否要保存變化。你可以使用關(guān)閉方法和設(shè)定它的保存變化(SaveChanges)參

19、數(shù)為假(False)來(lái)關(guān)閉這個(gè)工作簿并且不管它的任何變化。正如例子:Workbooks("Chap01.XLS").Close SaveChanges:=False學(xué)習(xí)對(duì)象,屬性和方法當(dāng)你學(xué)習(xí)新的事物時(shí),理論會(huì)給你必須的背景,但是,你如何真正知道那是什么呢?大多數(shù)人習(xí)慣形象思維,為了使Excel對(duì)象易于理解,VB在線幫助提供了一個(gè)對(duì)象模型,請(qǐng)看接下來(lái)的附圖。注意,Application對(duì)象位于樹(shù)型圖的最上端,它實(shí)際上代表Excel本身。其它對(duì)象在較低的層次。假設(shè)你想要控制Range對(duì)象,在你能夠控制任何Excel對(duì)象之前,你必須對(duì)它創(chuàng)建引用。為了獲得下圖中的Range對(duì)象,

20、只要遵照下面幾行代碼。每次看到樹(shù)型圖中的線指向不同的層時(shí),你只要巧妙地將線換成一個(gè)逗點(diǎn)運(yùn)算符(停頓,英文狀態(tài)下的句號(hào))。這樣,最終你會(huì)以下面的方式到達(dá)Range對(duì)象:Application.Workbook.Worksheet.Range你可以使用Excel對(duì)象樹(shù)型圖來(lái)尋找到其它對(duì)象的路徑,例如窗口(Window),批注(Comment),自動(dòng)篩選(AutoFilter)或者繪圖區(qū)(ChartArea)。分析對(duì)象模型是一個(gè)學(xué)習(xí)Excel對(duì)象的非常好的方法。你花在這里的時(shí)間,以后你開(kāi)始編寫(xiě)VBA過(guò)程的時(shí)候,會(huì)給你加倍的回報(bào)。通常,你需要明確你引用的對(duì)象的名稱?,F(xiàn)在,我們來(lái)點(diǎn)更具體的。假設(shè)你要清除

21、單元格A4里的內(nèi)容。手動(dòng)做這個(gè)時(shí),只要選擇單元格A4然后按下鍵盤(pán)上的Delete鍵就可以了。用VB做同樣的操作,你首先需要知道如何使Excel選中了正確的單元格。單元格A4和其它的工作表單元格一樣,是Range對(duì)象。VB沒(méi)有Delete方法來(lái)清除單元格內(nèi)容,取而代之的是ClearContents方法,例如:Range("A4").ClearContents注意在對(duì)象名稱和方法之間的逗點(diǎn)運(yùn)算符。這個(gè)指令去除單元格A4里的內(nèi)容。然而,如何使Excel清除工作簿Chap02.xls第一個(gè)工作表里單元格A4的內(nèi)容呢?我們?nèi)匀患僭O(shè)打開(kāi)了好幾個(gè)工作簿。圖24 Excel對(duì)象樹(shù)型圖(第一

22、頁(yè))(譯者:原書(shū)圖25(工作簿對(duì)象樹(shù)型圖)已包含在內(nèi),故在此略過(guò))如果你不希望最后在錯(cuò)誤的工作簿或工作表里刪除了A4里的內(nèi)容,那么你必須寫(xiě)下詳細(xì)的指令,這樣VB就知道在哪里找這個(gè)單元格:Application.Workbooks("Chap02.xls").Worksheets("Sheet1") .Range("A4").ClearContents上面的指令應(yīng)該寫(xiě)成一行,并且應(yīng)該從右到左閱讀:清除單元格A4里的內(nèi)容,這個(gè)單元格在一個(gè)叫“Sheet1”的工作表里,而這個(gè)工作表又在一個(gè)叫“Chap02.xls”的工作簿里面,工作簿“Ch

23、ap02.xls”又應(yīng)該是Excel應(yīng)用程序的一部分。注意,集合名稱的后面帶有一個(gè)字母“s”:Workbooks和Worksheets。所有引用的工作簿,工作表或單元格名稱都必須用引號(hào)(譯者:英文狀態(tài)的引號(hào))包括起來(lái)。如何找到Excel對(duì)象樹(shù)型圖?選擇Excel界面上的“幫助” “Excel幫助”“編程信息”“微軟Excel VB參考”“Excel對(duì)象模型”。(譯者:2002版有全局的對(duì)象模型,2003版好像沒(méi)有這個(gè)。)除了Excel對(duì)象,你還可以使用Office,F(xiàn)orms和DAO,ADO對(duì)象模型。屬于這些數(shù)據(jù)庫(kù)(library)中的對(duì)象都可以用在Excel中,也可以用在Office家族中的

24、其它應(yīng)用軟件中。在十五章,你可以看到使用DAO和ADO對(duì)象,從Excel進(jìn)入Access數(shù)據(jù)庫(kù)的例子。 圖26 Excel對(duì)象(Worksheet) 技巧24 VBA 和 Excel 的早期版本Excel在線幫助列出了Excel對(duì)象模型從早期版本以來(lái)的變化。許多對(duì)象,屬性和方法都已經(jīng)被更新的,改進(jìn)的特色所代替了。為了提供兼容性,被取代的對(duì)象已經(jīng)被隱藏起來(lái)了(譯者:它們?nèi)匀皇强捎玫模4蜷_(kāi)VB編輯器窗口上的在線幫助,隱藏的對(duì)象同樣可以在對(duì)象瀏覽器里找到。如果你在對(duì)象瀏覽器窗口上單擊右鍵,你可以選擇顯示隱藏成員的選項(xiàng)。你將在以后的章節(jié)中學(xué)習(xí)如何使用對(duì)象瀏覽器。 句法和文法既然現(xiàn)在你已經(jīng)知道了VBA

25、的一些基本組成要素(對(duì)象,屬性和方法),是時(shí)間開(kāi)始使用它們了。但是,你怎么將對(duì)象,屬性和方法連接成正確的語(yǔ)言結(jié)構(gòu)呢?每種語(yǔ)言都有語(yǔ)法規(guī)則,人們必須遵循語(yǔ)法以確保他們被理解了。無(wú)論你說(shuō)的是英語(yǔ),西班牙語(yǔ),法語(yǔ)還是其它語(yǔ)言,你在讀,寫(xiě)的時(shí)候都必須遵從一定的規(guī)則。在編程中,我們使用“句法”(syntax)這個(gè)術(shù)語(yǔ)來(lái)更確切地明確它的語(yǔ)言規(guī)則。你可以在在線幫助或者在對(duì)象瀏覽器窗口查找每個(gè)對(duì)象,屬性或方法的句法。下面列出一些你必須的VB常用規(guī)則:n 規(guī)則1:引用對(duì)象的屬性如果這個(gè)屬性沒(méi)有自變量,使用下面的句法:Object.Property對(duì)象是一個(gè)占位符,是你放置你想要進(jìn)入的實(shí)際對(duì)象名稱的地方。屬性同樣

26、也是一個(gè)占位符,你可以在這里放置該對(duì)象的特點(diǎn)。例如:指向工作表中單元格A4中輸入的值,見(jiàn)下述指令:Range("A4").Value注意對(duì)象名稱和屬性之間的句號(hào)。當(dāng)你需要進(jìn)入一個(gè)存在于多個(gè)其它對(duì)象里的對(duì)象的屬性時(shí),你必須按順序地寫(xiě)上所有對(duì)象的名稱,并且用 句號(hào)運(yùn)算符分開(kāi)。例如:ActiveSheet.Shapes(2).Line.Weight這個(gè)例子指向當(dāng)前工作表里圖形(Shapes)集合里的第二個(gè)對(duì)象里的直線(Line)對(duì)象的粗細(xì)(Weight)屬性。有些屬性要求一個(gè)或多個(gè)自變量。例如,使用偏移(Offset)屬性,你可以選擇一個(gè)和當(dāng)前單元格相對(duì)位置的單元格。Offset

27、屬性需要兩個(gè)自變量,第一個(gè)自變量為行號(hào)(rowOffset)第二個(gè)是列號(hào)(columnOffset)。 對(duì)象 屬性 自變量ActiveCell.Offset(3, 2)在上面的例子中,假設(shè)當(dāng)前單元格是A1,Offset(3, 2)將會(huì)指向往下3行和往右兩列的單元格,也就是單元格C4。因?yàn)?,在括?hào)內(nèi)的自變量總是很難理解,通常操作是將它們的名稱也列上,見(jiàn)下例:ActiveCell.Offset(rowOffset:=3, columnOffset:=2)注意,自變量名稱后面總是跟著一個(gè)冒號(hào)和一個(gè)等于號(hào)(:=)。如果你使用帶名稱的自變量,你可以任意順序地列出它們,上面的指令也可以寫(xiě)成這樣:Activ

28、eCell.Offset(columnOffset:=2, rowOffset:=3)改后的指令沒(méi)有改變意思,你仍然指向單元格C4。然而,如果你改變ActiveCell.Offset(3, 2)中自變量的次序,結(jié)果你會(huì)指向D3,而不是C4。n 規(guī)則2:改變對(duì)象的屬性O(shè)bject.Property = ValueValue是一個(gè)新的你要賦給該對(duì)象屬性的值。這個(gè)值可以是:² 一個(gè)數(shù)字Range("A4").Value = 25上面的指令在當(dāng)前工作表的單元格A4里輸入數(shù)字25² 在引號(hào)里的文本ActiveCell.Font.Name = "Times

29、 New Roman"上面的指令將當(dāng)前單元格字體改為T(mén)imes New Roman² 邏輯值(True或False)ActiveCell.Font.Bold = True上面的指令設(shè)置當(dāng)前單元格的字體為粗體。n 規(guī)則3:返回對(duì)象屬性的當(dāng)前值Variable = Object.PropertyVariable(變量)是VB將要儲(chǔ)存屬性設(shè)置的地方的名稱,你將在第三章里學(xué)習(xí)關(guān)于變量的知識(shí)。 變量 對(duì)象 屬性CellValue = Range(“A4”).Value上面的指令將當(dāng)前A4單元格里的值保存到變量CellValue。n 規(guī)則4:指向?qū)ο蟮姆椒ㄈ绻摲椒](méi)有自變量,那么句法

30、應(yīng)該是:Object.Method對(duì)象是一個(gè)占位符,是你放置你想要進(jìn)入的實(shí)際對(duì)象名稱的地方。方法同樣也是一個(gè)占位符,你可以在這里放置要對(duì)該對(duì)象的進(jìn)行的操作的名稱。例如,可以使用下述指令來(lái)清除單元格A4的格式(譯者:應(yīng)該是內(nèi)容):對(duì)象 方法Range("A4").ClearContents如果該方法可以使用自變量來(lái)限制,那么句法為:Object.Method (argument1, argument2, argumentN)例如,使用GoTo方法,你可以快速地選擇工作表里的任何區(qū)域。GoTo方法的句法為:Object.GoTo(Reference, Scroll)對(duì)象.GoT

31、o(參照, 窗口滾動(dòng))Reference自變量是目標(biāo)單元格或者區(qū)域,Scroll自變量可以設(shè)定為真(True)讓Excel窗口滾動(dòng)到該目標(biāo)地址出現(xiàn)在窗口的左上角;或者設(shè)定為假(False),窗口不滾動(dòng)(譯者:系統(tǒng)默認(rèn)為False)。例如,下面的VBA語(yǔ)句選擇工作表Sheet1里的單元格P100,并且窗口滾動(dòng):Application.GoTo _ Reference:=Worksheets("Sheet1").Range("P100"), _ Scroll:=True上面的指令沒(méi)有固定在一行,使用了一條特殊的線(下劃線)將它分為幾段。下面的部分將講述這個(gè)。

32、打斷很長(zhǎng)的VBA語(yǔ)句盡管一行VBA代碼最多可以包含1024個(gè)字母,但是,為了使你個(gè)過(guò)程容易閱讀,最好將長(zhǎng)的語(yǔ)句打斷為兩行甚至多行。VB使用一個(gè)專(zhuān)門(mén)的連續(xù)線(下劃線)置于一行代碼的末尾,表明下一行是這行的連續(xù)。例如:Selection.PasteSpecial _ Paste:=xlValues, _ Operation:=xlMultiply, _ SkipBlanks: =False, _ Transpose:=False這個(gè)連續(xù)符是下劃線,你必須在下劃線之后帶一個(gè)空格。你可以在下述幾種情況中使用連續(xù)符:n 運(yùn)算符之前或者之后。例如:&,+,Like,NOT,ANDn 逗號(hào)之前或者之

33、后n 冒號(hào)和等號(hào)(:=)之前或者之后n 等號(hào)之前或者之后你不可以在冒號(hào)和等于號(hào)之間使用連續(xù)符,例如,下面的代碼VB是不認(rèn)的:Selection.PasteSpecial Paste: _ =xlValues, Operation: _ =xlMultiply, SkipBlanks: _ =False, Transpose: _ =False Selection.PasteSpecial Paste: _ =xlValues, Operation: _ =xlMultiply, SkipBlanks: _ =False, Transpose: _ =False同樣,在引號(hào)之內(nèi)的文本之間加連續(xù)符

34、也是不對(duì)的,例如,下面的下劃線的使用是無(wú)效的:MsgBox "To continue the long instruction, use the _ line continuation character."上面的指令應(yīng)該打斷為如下代碼:MsgBox "To continue the long instruction, use the " & _ "line continuation character."了解VBA錯(cuò)誤在編寫(xiě)或編輯VBA過(guò)程之中,無(wú)論你多名小心,出錯(cuò)的可能性還是很打的。例如,你可以錯(cuò)誤拼寫(xiě)一語(yǔ)句,放錯(cuò)了一個(gè)逗

35、號(hào)或引號(hào),或者忘記了一個(gè)句號(hào)或右括號(hào)。這些類(lèi)型的錯(cuò)誤稱為句法錯(cuò)誤。幸運(yùn)的是,VB比較容易幫助你發(fā)現(xiàn)這種類(lèi)型的錯(cuò)誤。為了讓VB在你輸入一行代碼后,自動(dòng)幫你檢測(cè)語(yǔ)法的正確性,你需要在VB窗口的“工具”“選項(xiàng)”里,確保勾選了“編輯器”頁(yè)上的“自動(dòng)語(yǔ)法檢測(cè)”。圖27 選項(xiàng)對(duì)話框的編輯器上的“自動(dòng)語(yǔ)法檢測(cè)”幫你檢查VBA過(guò)程里的打字錯(cuò)誤當(dāng)VB發(fā)現(xiàn)語(yǔ)法錯(cuò)誤時(shí),彈出一個(gè)錯(cuò)誤信息框,并且將有誤的代碼行顏色變?yōu)榧t色(參見(jiàn)圖28)或者其它在選項(xiàng)對(duì)話框“編輯器格式”頁(yè)設(shè)定的顏色。如果錯(cuò)誤信息框上的解釋不夠清楚,你總是可以點(diǎn)擊“幫助”按鈕尋求更多的幫助。再如果VB在線幫助無(wú)法給你提供正確的方向,那么返回你的程序,仔細(xì)

36、檢查有誤的那行代碼是否漏掉了字母,引號(hào),句號(hào),冒號(hào),等于號(hào),左括號(hào)和右括號(hào)等。圖28 這個(gè)錯(cuò)誤由于漏掉了常數(shù)xlCellType前面的括號(hào)而產(chǎn)生圖29 當(dāng)VB試圖在工作表或單元格區(qū)域里選擇一個(gè)并不存在的單元格時(shí),就會(huì)產(chǎn)生一個(gè)運(yùn)行時(shí)間錯(cuò)誤查找語(yǔ)法錯(cuò)誤可能是煩人的并且費(fèi)時(shí)的事情。有些語(yǔ)法錯(cuò)誤只有在過(guò)程運(yùn)行的時(shí)候才能被發(fā)現(xiàn)。在試圖運(yùn)行你的過(guò)程的時(shí)候,VB可能找到那種因?yàn)槭褂昧藷o(wú)效的自變量,或者是漏掉了那些需要成對(duì)使用的指令如If語(yǔ)句和循環(huán)結(jié)構(gòu),而造成的錯(cuò)誤。技巧25:程序調(diào)試你很可能不只一次聽(tīng)過(guò)“計(jì)算機(jī)程序里充滿了錯(cuò)誤”。在編程里,錯(cuò)誤就被稱為“bug”(錯(cuò)誤,漏洞),而“調(diào)試”(debug)則是給

37、你的程序除錯(cuò)的過(guò)程。調(diào)試的第一步就是改正所有的語(yǔ)法錯(cuò)誤。VB提供了無(wú)數(shù)種工具,你可以使用它們來(lái)追蹤和消除錯(cuò)誤。在本章中,你將知道如何使用VB助手幫助你在編寫(xiě)程序時(shí)出現(xiàn)盡可能少的錯(cuò)誤;在第十三章中,你將學(xué)習(xí)如何使用專(zhuān)門(mén)的調(diào)試工具來(lái)捕獲你VBA程序里的錯(cuò)誤。除了語(yǔ)法錯(cuò)誤外,還有其它兩種錯(cuò)誤:運(yùn)行時(shí)間和邏輯。運(yùn)行時(shí)間錯(cuò)誤發(fā)生在過(guò)程運(yùn)行的時(shí)候。圖29顯示了一種典型的運(yùn)行時(shí)間錯(cuò)誤。運(yùn)行時(shí)間錯(cuò)誤經(jīng)常發(fā)生在那些程序員在編寫(xiě)代碼的時(shí)候沒(méi)有想到的情況。例如,當(dāng)程序試圖訪問(wèn)一個(gè)用戶電腦上并不存在的驅(qū)動(dòng)器或者文件,或者沒(méi)有首先檢查是否用戶插入軟盤(pán)并關(guān)閉軟驅(qū)口而試圖復(fù)制一個(gè)文件到軟盤(pán),這時(shí)就會(huì)發(fā)生運(yùn)行時(shí)間錯(cuò)誤。第三種

38、錯(cuò)誤邏輯錯(cuò)誤,通常不會(huì)發(fā)出明確的錯(cuò)誤信息。過(guò)程可能沒(méi)有語(yǔ)法錯(cuò)誤,甚至運(yùn)行無(wú)誤,然而,得到的卻是錯(cuò)誤的結(jié)果。邏輯錯(cuò)誤通常非常難以查找,并且它藏得很隱秘,間歇發(fā)生,你不能指望花幾個(gè)小時(shí),甚至幾天,就能找到錯(cuò)誤源。查找?guī)椭?dāng)你使用宏錄制器時(shí),你所有的操作都被翻譯成VBA指令,并且放置在一個(gè)模塊里。你在研究這些錄制的過(guò)程時(shí),不要忘記幫助隨時(shí)可用。你會(huì)發(fā)現(xiàn)有些代碼的意思可能會(huì)非常易懂,然而,有效卻不怎么明白。這時(shí)候,你就需要尋求幫助了。當(dāng)你獨(dú)自工作時(shí),只要輕輕一點(diǎn)或者輕輕一按就可以請(qǐng)教你的VBA老師了。使用VB在線幫助比使用詞典或參考手冊(cè)要快捷和容易得多。如果你討厭一頁(yè)一頁(yè)地在詞典里找你需要的術(shù)語(yǔ),你將

39、驚訝于你如何快地從VB代碼窗口找到需要的幫助頁(yè)面。讓我們來(lái)檢查你如何通過(guò)內(nèi)置的VBA老師的幫助,將WhatsInACell過(guò)程里的第一句變成你自己的VBA詞匯:Selection.SpecialCells(xlCellTypeConstants, 2).Select上面的指令可以打斷為三部分,哪些部分?Selection是對(duì)象還是屬性?SpecialCells是什么?Select是什么?要回答這些問(wèn)題,請(qǐng)依照下面的操作:1. 激活你要分析的過(guò)程的代碼窗口2. 點(diǎn)擊你不懂的詞語(yǔ)3. 按下F1圖210 VBA的對(duì)象,屬性和方法在在線幫助里解釋得很詳細(xì)幫助就會(huì)顯示相應(yīng)的頁(yè)面。如果你的光標(biāo)放在詞語(yǔ)“S

40、election”中間,你就會(huì)知道Selection可以是一個(gè)應(yīng)用程序的屬性,也可以是一個(gè)窗口對(duì)象。如果你的光標(biāo)在下一個(gè)不明白的術(shù)語(yǔ)(SpecialCells)并且按上面的步驟再做一遍后,你將看到SpecialCells幫助屏幕(參見(jiàn)圖210)。注意,每個(gè)幫助主題包含許多信息。被查找的指令類(lèi)型顯示在幫助窗口的上面;指令的類(lèi)型允許詞語(yǔ)分類(lèi)。例如,SpecialCells是方法,可以使用這個(gè)方法的對(duì)象名稱列在“應(yīng)用于”下面(譯者:點(diǎn)擊“應(yīng)用于”,出現(xiàn)對(duì)象名稱列表)。指令名稱下面的“參閱”和“示例”讓你快速地跳到其它應(yīng)用或意義相似的指令,以及查看使用這個(gè)指令的例子。指令的意義顯示在“參閱”和“示例”

41、標(biāo)題的下面。接下來(lái)則是語(yǔ)法和需要的自變量和其它參數(shù)?!罢f(shuō)明”部分給出一些推薦使用該指令的情形。你可以很容易地將示例中的代碼復(fù)制到你的過(guò)程中去:選中你要復(fù)制的代碼行,按下Ctrl+C,或者單擊右鍵,選擇快捷菜單上的“復(fù)制”,然后切換到VB代碼窗口,點(diǎn)擊你需要粘貼代碼的地方,再按下Ctrl+V或者選擇“編輯”“粘貼”。語(yǔ)法和編程快捷助手VB編輯器窗口上的“編輯”工具條上有很多按鈕,幫助你快速容易地輸入正確格式的VBA指令。如果“編輯”工具條目前在VB編輯器窗口上不可連接,那么你可以選擇“視圖”“工具條”圖211 編輯工具條上的按鈕使得編寫(xiě)程序和設(shè)置指令格式變得很容易 在VB中編寫(xiě)過(guò)程需要你使用成百

42、上千的內(nèi)置指令和函數(shù)。因?yàn)榇蠖鄶?shù)人們無(wú)法學(xué)習(xí)所有VBA里可用指令的語(yǔ)法,IntelliSense提供了你所需求的語(yǔ)法和編程幫助。當(dāng)你在代碼窗口編程時(shí),經(jīng)常會(huì)有專(zhuān)門(mén)的窗口彈出來(lái),引導(dǎo)你完成正確的VBA代碼。屬性/方法列表每個(gè)對(duì)象都會(huì)有許多屬性和方法。當(dāng)你輸入一個(gè)對(duì)象名稱和一個(gè)句號(hào)以分開(kāi)這個(gè)對(duì)象名稱和它的屬性或方法時(shí),彈出一個(gè)列表菜單。這個(gè)菜單列出了在這個(gè)句號(hào)之前的對(duì)象的所有可用的屬性和方法(參見(jiàn)圖212)。如何打開(kāi)這個(gè)自動(dòng)工具?選擇“工具”“選項(xiàng)”,單擊選項(xiàng)對(duì)話框上的“編輯器”頁(yè),確保勾選上“自動(dòng)列出成員”。圖212 在輸入VBA指令時(shí),VB會(huì)建議可以用于該對(duì)象的屬性和方法如何從彈出菜單(圖21

43、2)上選擇項(xiàng)目?試圖輸入你需要的屬性或方法名稱的前幾個(gè)字母,當(dāng)Excel突出顯示了正確的項(xiàng)目名稱,則回車(chē),插入該項(xiàng)目到你的代碼中去,并且開(kāi)始新的一行;或者,你需要在同一行繼續(xù)寫(xiě)代碼,那么就按Tab鍵代替回車(chē)。你也可以雙擊該項(xiàng)目來(lái)插入到代碼中去。只要按Esc鍵就可以關(guān)閉這個(gè)彈出菜單,而不插入任何項(xiàng)目。當(dāng)你按Esc鍵取消了彈出菜單后,VB將不會(huì)對(duì)同樣的對(duì)象顯示該菜單。你可以通過(guò)以下方法來(lái)再次顯示屬性/方法彈出菜單:n 按Ctrl+Jn 使用“backspace”(后退)鍵刪除句號(hào),然后重新輸入句號(hào)n 在代碼窗口上單擊右鍵(該對(duì)象,句號(hào)后),并且在快捷菜單上選擇“屬性/方法列表”n 選擇“編輯”“屬

44、性/方法列表”n 點(diǎn)擊“編輯器”工具條上的“屬性/方法列表”按鈕常數(shù)列表本章的前面,你學(xué)習(xí)了給屬性賦值,需要使用下面規(guī)則:Object.Property = Value如果選項(xiàng)對(duì)話框(編輯器頁(yè))已經(jīng)勾選了“自動(dòng)列出成員”,Excel就會(huì)在等號(hào)前的屬性彈出一個(gè)菜單,列出該對(duì)屬性有效的常數(shù)。常數(shù)是表明確切的描述或者結(jié)果的值。Excel和Office里面的其它應(yīng)用軟件都有很多預(yù)先定義的內(nèi)置常數(shù)。你將在第三章中學(xué)習(xí)常數(shù),常數(shù)類(lèi)型和使用。假設(shè)你需要你的程序打開(kāi)Excel工作表上的分頁(yè)預(yù)覽?!熬庉嫛保ㄗg者:視圖)菜單上有兩個(gè)選擇:普通視圖和分頁(yè)預(yù)覽。普通視圖是絕大多數(shù)Excel任務(wù)的默認(rèn)視圖模式;分頁(yè)預(yù)覽

45、則是編輯視圖,顯示工作表中有內(nèi)容的區(qū)域。這兩種選項(xiàng)都有相應(yīng)的內(nèi)置常數(shù)來(lái)表示。Excel常數(shù)起名總是以“xl”開(kāi)頭。你一旦在代碼窗口里輸入指令:ActiveWindow.View =就會(huì)彈出一個(gè)菜單,列出這個(gè)屬性的有效常數(shù)名稱。使用在上節(jié)中“屬性/方法列表”彈出菜單同樣的技術(shù),也可以處理“常數(shù)列表”彈出菜單。按下Ctrl+Shift+J或者點(diǎn)擊“編輯器”工具條上的“常數(shù)列表”按鈕,可以激活常數(shù)列表菜單。圖213 常數(shù)列表彈出菜單顯示了對(duì)敲入的屬性有效的常數(shù)清單參數(shù)信息如果你有過(guò)使用Excel函數(shù)的經(jīng)歷,你就會(huì)知道許多函數(shù)需要一個(gè)或者多個(gè)自變量(或者參數(shù))。如果VB函數(shù)要求自變量,你可以在輸入左括

46、號(hào)后在光標(biāo)下面看到一個(gè)提示框,顯示必要的或可選的自變量的名稱(參見(jiàn)圖214)。參數(shù)信息幫你很容易地給VBA函數(shù)設(shè)置參數(shù)。另外,它提醒你其它兩件對(duì)函數(shù)運(yùn)行正確至關(guān)重要的事情:自變量的順序和自變量要求的數(shù)據(jù)類(lèi)型。你將在下一章里學(xué)習(xí)數(shù)據(jù)類(lèi)型。在代碼窗口里面輸入下述代碼,看看參數(shù)信息是如何工作的:ActiveWorkbook.SaveAs(圖214 A tip window displays a list of arguments utilized by a VBA function or instruction.你一旦輸入了開(kāi)始的括號(hào),光標(biāo)的下面就會(huì)出現(xiàn)一個(gè)提示框,當(dāng)前的自變量會(huì)顯示為粗體;當(dāng)你輸入

47、完第一個(gè)自變量并且輸入了逗號(hào),VB會(huì)將下一個(gè)自變量為粗體??蛇x的自變量會(huì)用中括號(hào) 括起來(lái)。只要按下Esc鍵就可以關(guān)閉參數(shù)信息窗口。如何使用鍵盤(pán)來(lái)打開(kāi)提示窗口?輸入指令或函數(shù),緊接著是左括號(hào),然后按下Ctrl+Shift+I。你也可以點(diǎn)擊編輯菜單上的參數(shù)信息按鈕或者選擇“編輯”“參數(shù)信息”。快速信息當(dāng)你選擇了代碼窗口里的指令,函數(shù),方法,過(guò)程名稱或者常數(shù),然后點(diǎn)擊編輯工具條上的“快速信息”按鈕(或者按下Ctrl+I),VB將會(huì)顯示突出顯示項(xiàng)目的語(yǔ)法和常數(shù)的值。快速信息可以通過(guò)選項(xiàng)對(duì)話框來(lái)打開(kāi)或者關(guān)閉。在編輯器頁(yè),勾選“自動(dòng)顯示快速信息”,打開(kāi)快速信息功能。圖215 快速信息提供函數(shù)參數(shù)清單,也可

48、以是常數(shù)值和VBA語(yǔ)句語(yǔ)法自動(dòng)完成關(guān)鍵字加速在代碼窗口編寫(xiě)VBA程序的另一種方法是使用“自動(dòng)完成關(guān)鍵字”功能。當(dāng)你輸入一個(gè)關(guān)鍵字的前幾個(gè)字母,然后按下Ctrl+空格鍵,或者點(diǎn)擊編輯工具條上的“自動(dòng)完成關(guān)鍵字”按鈕,VB會(huì)幫你輸入這個(gè)關(guān)鍵字的剩余字母,節(jié)約你的時(shí)間。例如,在代碼窗口里輸入關(guān)鍵字“Application”的前四個(gè)字母,并且按下Ctrl+空格鍵:ApplVB將會(huì)完成剩余的字母,在Appl地方,你將看到整個(gè)關(guān)鍵字Application。如果有好幾個(gè)關(guān)鍵字具有相同的開(kāi)頭字母,當(dāng)你按下Ctrl+空格鍵后,VB會(huì)顯示一個(gè)彈出菜單,列出所有關(guān)鍵字。測(cè)試這個(gè)例子,可以輸入關(guān)鍵字Applicati

49、on的前三個(gè)字母,按工具條上的自動(dòng)完成關(guān)鍵字按鈕,然后在彈出菜單上選取合適的關(guān)鍵字??s進(jìn)/凸出也許你已經(jīng)看到,在選項(xiàng)對(duì)話框的編輯器頁(yè)上有許多設(shè)置你可以打開(kāi)以使用代碼窗口許多可用的自動(dòng)功能。如果勾選了“自動(dòng)縮進(jìn)”選項(xiàng),你就可以自動(dòng)縮進(jìn)所選的代碼行,縮進(jìn)的量為“Tab寬度”文本框里的數(shù)字。默認(rèn)的自動(dòng)縮進(jìn)量是4個(gè)字母,你也可以在文本框里輸入一個(gè)新的數(shù)字來(lái)改變Tab寬度。你為什么需要在代碼里使用縮進(jìn)?縮進(jìn)可以使你的代碼更容易閱讀和理解。特別是輸入一些做決定或重復(fù)性工作的代碼行時(shí),更建議使用縮進(jìn)。你將在第五和第六章中學(xué)習(xí)如何創(chuàng)建這種類(lèi)型的VB指令?,F(xiàn)在,我們來(lái)練習(xí)使用縮進(jìn)和凸出代碼行,用第一章里的宏Wh

50、atsInACell作為例子:1. 在工程瀏覽器窗口,選擇FirstSteps(Chap01.xls)工程,并且激活含有WhatsInACell代碼的WorksheetFormatting模塊2. 選擇開(kāi)始為關(guān)鍵字With和結(jié)束為End With的一段代碼3. 點(diǎn)擊編輯工具條上的縮進(jìn)按鈕,或者按鍵盤(pán)上的Tab鍵(譯者:按Tab鍵需要將光標(biāo)放在行首,而非選中指令)4. 選中的指令會(huì)向右移動(dòng)4個(gè)字母的位置,如果使用了Tab寬度的默認(rèn)設(shè)置。5. 點(diǎn)擊編輯工具條上的“凸出”按鈕,或者按Shift+Tab將選中的指令行返回原來(lái)的位置??s進(jìn)和凸出同樣可以在編輯菜單里找到。設(shè)置注釋塊/解除注釋塊在第一章中,

51、你學(xué)習(xí)了一行代碼前面加一個(gè)引號(hào)表示注釋。注釋不但使代碼更容易理解,而且它在VBA過(guò)程的測(cè)試和處理問(wèn)題中都是很有用的。例如,你執(zhí)行一個(gè)過(guò)程時(shí),它可能和期望的運(yùn)行不一致,對(duì)于那些可能產(chǎn)生問(wèn)題的代碼行,你現(xiàn)在想略過(guò)它們,但是以后可能還需要用到它們,你就可以在它們前面加一個(gè)引號(hào)注釋掉它們,而不必刪除它們。對(duì)大多數(shù)人來(lái)說(shuō),需要注釋掉一行代碼的話,只有在它前面敲入一個(gè)引號(hào)就可以了,但是,如果要注釋掉整塊代碼,使用“編輯”工具條上的“設(shè)置注釋塊”和“解除注釋塊”按鈕則是很方便的。要注釋掉幾行代碼,只要選中這些代碼行并且點(diǎn)擊“設(shè)置注釋塊”按鈕。點(diǎn)擊“解除注釋塊”按鈕,將注釋掉的代碼恢復(fù)到代碼里。如果你沒(méi)有選中

52、文本,就點(diǎn)擊了“設(shè)置注釋塊”按鈕,只有在光標(biāo)所在的代碼行前面加入引號(hào)。 使用對(duì)象瀏覽器如果你想要在VBA眾多的組件和功能中自由切換,那么使用對(duì)象瀏覽器。這個(gè)專(zhuān)門(mén)的內(nèi)置工具在VB編輯器窗口是可用的。使用下面任何一種方法都可以訪問(wèn)對(duì)象瀏覽器:圖216 對(duì)象瀏覽器讓你在當(dāng)前VBA工程里可用的所有對(duì)象,屬性和方法里瀏覽n 按F2n 選擇“視圖”“對(duì)象瀏覽器”n 點(diǎn)擊工具條上的“對(duì)象瀏覽器”按鈕對(duì)象瀏覽器讓你瀏覽VBA過(guò)程中可用的對(duì)象,也可以查看它們的屬性,方法和事件。在對(duì)象瀏覽器的幫助下,你可以在VBA工程的多個(gè)過(guò)程之間快速移動(dòng)。對(duì)象瀏覽器分為三部分(參見(jiàn)圖216)。窗口的上部顯示“工程/庫(kù)”下拉列表

53、,這里列出了所有庫(kù)名稱以及當(dāng)前VBA工程里可用的所有工程名稱。庫(kù)是包含一個(gè)應(yīng)用程序里對(duì)象的信息的專(zhuān)門(mén)文件。新的庫(kù)可以通過(guò)“引用”對(duì)話框(“工具”“引用”)來(lái)添加。<所有庫(kù)>列出了你電腦上安裝了的所有庫(kù)中的所有對(duì)象。當(dāng)你選擇一個(gè)叫“Excel”的庫(kù)時(shí),僅僅能在Excel里執(zhí)行的對(duì)象名稱才能被看到。和Excel庫(kù)相反,VBA庫(kù)列出了所有能在VBA里執(zhí)行的對(duì)象名稱。在“工程/庫(kù)”下拉列表框下面,有一個(gè)“搜索”文本框,讓你可以快速地在某個(gè)庫(kù)里搜索你的信息。這個(gè)地方會(huì)記住你最近搜索的四個(gè)項(xiàng)目。在對(duì)象瀏覽器的任何地方單擊右鍵,在快捷菜單上選擇“全字匹配”,你就可以只搜索匹配整個(gè)字的內(nèi)容。對(duì)象瀏

54、覽器上的“搜索結(jié)果”(參見(jiàn)圖216和217)顯示符合搜索條件的庫(kù),類(lèi)和成員。當(dāng)你輸入搜索文本并且單擊搜索按鈕,VB展開(kāi)對(duì)象瀏覽器對(duì)話框以顯示搜索結(jié)果。你可以點(diǎn)擊“望遠(yuǎn)鏡”按鈕右邊的“顯示/隱藏搜索結(jié)果”來(lái)顯示或者隱藏搜索結(jié)果。圖217 在對(duì)象瀏覽器里搜索答案類(lèi)列表框顯示所選中的庫(kù)里面所有可用的對(duì)象類(lèi),如果你選擇VBA工程,列表顯示該工程里的對(duì)象。在圖216里,CommandBarComboBox 對(duì)象類(lèi)被選中了。當(dāng)你選中一個(gè)類(lèi),右邊的列表(成員)顯示該類(lèi)可用的屬性,方法和事件。圖216上顯示了類(lèi)CommandBarComboBox的一些成員。成員默認(rèn)地按字母順序列出。然而,你可以使用對(duì)象瀏覽器

55、快捷菜單上的“組成員”來(lái)組織這些成員列表(屬性,方法或事件)。如果你選擇“工程/庫(kù)”里面的VBA工程,成員列表框列出該工程里的所有過(guò)程。雙擊該過(guò)程名稱,就可以進(jìn)入該過(guò)程并檢查其代碼。如果你選擇類(lèi)“VBA”,你將看到VB內(nèi)置的函數(shù)和常數(shù)。如果你對(duì)所選的類(lèi)或成員需要更多的信息,可以點(diǎn)擊對(duì)象瀏覽器窗口上面的問(wèn)號(hào)按鈕。對(duì)象瀏覽器下面的窗口顯示所選成員的代碼格式。如果你點(diǎn)擊代碼格式里綠色的連接部分,你將跳到對(duì)象瀏覽器窗口的所選成員的類(lèi)或庫(kù)。代碼格式里的代碼可以被復(fù)制到Windows剪切板并且粘貼到代碼窗口里去。如果對(duì)象瀏覽器和代碼窗口都是可見(jiàn)的,你只要選中代碼格式里的文本,直接拖曳到代碼窗口就行了。通過(guò)

56、對(duì)象瀏覽器窗口上的橫豎分割線,你可以輕易地改變各個(gè)窗口的大小。你已經(jīng)發(fā)現(xiàn)了對(duì)象瀏覽器,你也許在想你如何才能讓它幫助你進(jìn)行VBA編程。假設(shè)你在工作表中央放置了一個(gè)文本框,你如何讓Excel將這個(gè)文本框移動(dòng)到工作表的左上方?1. 打開(kāi)一個(gè)新工作表2. 選擇“視圖”“工具欄”,然后點(diǎn)擊“繪圖”3. 點(diǎn)擊“繪圖”上的文本框,在工作表中央畫(huà)一個(gè)文本框,并且隨便輸入什么文字4. 選擇文本框之外的任意單元格5. 按下Alt+F11激活VB編輯器窗口,并且選擇工程瀏覽器窗口的Personal (Personal.xls)6. 選擇“插入”“模塊”,增加一個(gè)新的模塊7. 在屬性窗口,給該模塊重命名:Manipu

57、lations8. 選擇“視圖”“對(duì)象瀏覽器”,或按F29. 在“工程/庫(kù)”下拉列表框里選擇“Excel”類(lèi)10. 在搜索框里輸入“textbox”并點(diǎn)擊搜索按鈕。確保你沒(méi)有在文字間敲入空格。圖218 Excel 在工作表上面的名稱框里顯示插入的對(duì)象名稱圖219 使用對(duì)象瀏覽器窗口,你可以找到合適的VBA指令來(lái)編寫(xiě)你自己的過(guò)程顯示的結(jié)果表明對(duì)象Shapes掌管我們文本框操作(參見(jiàn)圖219)。從成員列表清單上看,你可以很快就知道AddTextbox方法就是用來(lái)在工作表里添加文本框的方法。代碼格式窗口顯示了使用該方法的正確語(yǔ)法。如果你選擇AddTextbox方法并且按F1,你將看到關(guān)于它的幫助窗口,有更詳細(xì)的關(guān)于如果使用該方法的信息(參見(jiàn)圖220)圖220 要獲取對(duì)象瀏覽器找到的任何項(xiàng)目詳細(xì)信息,只要選擇整個(gè)項(xiàng)目并且按F1就可以了當(dāng)你細(xì)看AddTextbox方法的自變量和它們?cè)趲椭翱谏系慕忉寱r(shí),你就可以很快地知道文本框在工作表中的位置是由Left和Top屬性來(lái)決定的。你需要做的只是返回代碼窗口,編寫(xiě)指令來(lái)移動(dòng)文本框到工作表的左上方。11. 關(guān)閉對(duì)象瀏覽器和幫助窗口(如果它們還是打開(kāi)的)12. 雙擊Manipulations模塊,輸入過(guò)程MoveTextBox:Sub MoveTextBox() With ActiveSheet.Shapes("Text box 1&qu

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論