學(xué)習(xí)VBA編程【最完整的】_第1頁(yè)
學(xué)習(xí)VBA編程【最完整的】_第2頁(yè)
學(xué)習(xí)VBA編程【最完整的】_第3頁(yè)
學(xué)習(xí)VBA編程【最完整的】_第4頁(yè)
學(xué)習(xí)VBA編程【最完整的】_第5頁(yè)
已閱讀5頁(yè),還剩731頁(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、 作者:JulittaKorol翻譯:TigerChenNov282004語(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ù)制到單元格B1”?你也許知道這些單個(gè)的詞語(yǔ),

2、然而,你怎么知道如何將它們正確地組合在一起,Excel才能執(zhí)行這些任務(wù)?你將在本章中學(xué)習(xí)VBA的術(shù)語(yǔ)和規(guī)則。1了解指令,模塊和過(guò)程2010-7-24在第一章,你學(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è)“指令”。指令的類型有很多中,例

3、如關(guān)鍵詞,運(yùn)算符,或者其它過(guò)程的調(diào)用?!瓣P(guān)鍵詞”代表VB中的一個(gè)特殊的意義。在第一章中,你學(xué)習(xí)了最常見(jiàn)的VBA關(guān)鍵詞一一Sub和EndSub,它們表示一個(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)算符有四種類型:算術(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指令的另外一種類型是過(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)鍵詞EndSub時(shí)則停止。在你嘗試這個(gè)例子之前,你必須學(xué)會(huì)如何給VBA

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

6、irstStep”作為該VBA工程的名稱,回車。注意,工程瀏覽器現(xiàn)在顯示的是名稱是FirstSteps(Chap01.xls)在工程瀏覽窗選擇VBAProject(Personal.xls)雙擊屬性里的名稱屬性輸入“Personal作為它的名稱,回車技巧21避免名稱沖突為了避免VBA工程之間的命名沖突,請(qǐng)給你的工程獨(dú)特的名稱。你可以使用下述方法之一來(lái)更改工程名稱:在工程瀏覽器窗,選擇工程名稱,雙擊屬性窗里的名稱屬性,再輸入新的名稱在工程瀏覽器窗,在工程名稱上單擊右鍵,并且選擇“工程名稱屬性”。出現(xiàn)如圖2-1顯示的工程屬性對(duì)話框,在工程名稱文本框里面輸入新的名稱圖2-1工程屬性窗可以用來(lái)更改當(dāng)前

7、被選中的工程名稱和描述3模塊重命名當(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(ChapO1.xls)工程和Personal(Personal.xls工程里的“模塊1”重新命名:在工程瀏覽器窗,選擇FirstSteps(Chap01.xl工程,并且選擇“模塊1”雙

8、擊屬性窗口里的名稱屬性,這個(gè)動(dòng)作選中了模塊的默認(rèn)名稱“模塊1”輸入“WorksheetFormatting”作為模塊1的名稱,并且回車。注意,工程瀏覽器窗現(xiàn)在顯示的模塊名稱是“WorksheetFormatting”在工程瀏覽器窗選擇Personal(Personal.xls)雙擊屬性窗里的名稱屬性輸入“Switches”作為模塊1的名稱,回車工程-VIAProject圏+鬆Acroba.lPDFIaker(PDFI+霸QVExcelAddin(QTaddi-黯VBAProjectOook2)-、MicrosoftEscel對(duì)象Shetl(Sheetl)OShtE(Sheets)松ThisMa

9、rktiook-、模塊麟模塩1-魅VBAFroject(Booka)+MicrosoftExcel對(duì)象+1-D窗體+1-D模塊釘I圖22工程瀏覽器窗口顯示通過(guò)屬性窗口給工程和模塊設(shè)置的獨(dú)特名稱4從其它工程調(diào)用過(guò)程你只要明確過(guò)程名稱,就可以調(diào)用這個(gè)在同一個(gè)工程里任何模塊里的過(guò)程。假設(shè)過(guò)程FormulasOnOff和宏WhatsInACell在同一個(gè)工程里的不同模塊(或者同一個(gè)模塊),在WhatsInACell宏里面調(diào)用過(guò)程FormulasOnOff,你所要做的所有工作只是明確過(guò)程名稱,示例如下:SubWhatsInACell()這里是你錄制的指令FormulasOnOffEndSub然而,如果兩

10、個(gè)或者兩個(gè)以上的模塊含有這個(gè)相同的過(guò)程名稱,你除了要明確過(guò)程名稱外,還必須包括模塊名稱。假設(shè)工程FirstSteps(ChapOl.xl有三個(gè)模塊。模塊FormulaFormatting包含宏WhatsInACell,但是,模塊Switches和模塊Formulas都含有一個(gè)叫FormulasOnOff的宏。如何在WhatsInACell調(diào)用FormulasOnOff(模塊Switches里面的)?請(qǐng)看下面例子:SubWhatsInACell()這里是你錄制的指令Switches.FormulasOnOffEndSub要調(diào)用其它工程里的過(guò)程,你必須建立對(duì)該工程的引用。你可以在“引用”對(duì)話框進(jìn)行

11、這些操作。因?yàn)镕ormulasOnOff在Personal(Personal.xl工程里,在你能夠從WhatsInACell調(diào)用它之前,你需要添加對(duì)“Personal”的引用。下面是幾種建立引用的方法:在工程瀏覽器窗,點(diǎn)擊FirstSteps(Chap01.xls)選擇“工具”“引用”在引用對(duì)話框,選中“Personal”旁邊的勾選框(參見(jiàn)圖2-3),然后點(diǎn)擊確定(譯者:在截圖前,我并沒(méi)有保存Personal,所以在附圖里沒(méi)有Personal-行,如果你依照書(shū)中一步一步走下來(lái),應(yīng)該沒(méi)有問(wèn)題)引用-VBAProject2SJ|底貶叵|憂先級(jí)可使用的引用(A):ViEu:dlBizicF-jrAj

12、iplicatiutle亠MicrosoftEkcel11.UUbjsctLi驗(yàn)artIOLEAnitI:m:tLuIIicroEottUtfice11.0OtiiectLiTirAcroLatPDFMakerAdobefDFMakerXFol-ms2.0ObjectLibi_:xt_7Offi-25XT肝小匚MicrQSfttWLiLdfisCc-fTim-jilCQnti-jlsEQWEKcelMdin耒保存:YAFrojectIASHelpsrCOMCimp&TLertt1.0TyptIASRADIUSFrctocol1.0TypeLibr?訕1+b*眄HliPn+EMIIGh叭Micr

13、oEOftOffice11.0ObjectLibrary定位;C;.FrogramFilesCQinmqrFilus訕iumftShajredOFI語(yǔ)言:標(biāo)唯圖23引用對(duì)話框列出了所有這個(gè)工程可以引用的工程。如果你想要執(zhí)行其它工程里的過(guò)程,你就必須建立對(duì)這個(gè)工程的引用既然對(duì)“Personal”工程的引用已經(jīng)建立了,我們就來(lái)從WhatslnACell里調(diào)用FormulasOnOff吧。在工程瀏覽器窗,選擇FirstSteps(ChapOl.xl并且定位到含有WhatsInACell的模塊在MsgBox所有操作都已完成之前增加一空白行,并且輸入代碼:FormulasOnOff返回到Excel界面,

14、確保當(dāng)前工作表是這個(gè)例子數(shù)據(jù)(參見(jiàn)第一章的圖1-1)4使用任何你在第一章里學(xué)到的方法來(lái)運(yùn)行宏WhatsInACell如果你給兩個(gè)不同工程里的不同過(guò)程以相同的名稱,那么你必須明確工程名稱才能調(diào)用它。我們假設(shè)FirstSteps(ChapOl.xl工程和Personal(Personal.xls工程里都有叫FormulasOnOff的宏,要調(diào)用Personal(Personal.xl工程里的FormulasOnOff(記住,你已經(jīng)必須先建立對(duì)Personal的引用),必須包括工程名稱:SubWhatslnACell()這里是你錄制的指令Personal.Switches.FormulasOnOff

15、EndSub技巧2-2VB如何定位被調(diào)用的過(guò)程當(dāng)你調(diào)用一個(gè)過(guò)程,VB先在主調(diào)方(WhatsInACell)的同一個(gè)模塊里查找。如果沒(méi)有找到被調(diào)過(guò)程(FormulasOnOff),VB就會(huì)在同一個(gè)工程的其它模塊里查找。如果還是找不到,VB則會(huì)檢查對(duì)其它工程的引用。技巧2-3工程名稱不在引用對(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從文件類型的下拉清單中選擇Excel文件(*.xls,*.Xla選擇并打開(kāi)含有你要調(diào)用過(guò)程的

16、文件。這個(gè)工程的名稱將會(huì)加在引用對(duì)話框的最后一行。5了解對(duì)象,屬性和方法使用VBA,你可以創(chuàng)建工程控制Excel的許多東西,你同樣也可以控制很多其它的應(yīng)用程序。VB的偉大來(lái)自于它的控制和管理各種各樣的對(duì)象的能力。但是,“對(duì)象”是什么呢?“對(duì)象”是你通過(guò)VBA控制的東西。工作簿,工作表,工作表里的單元格區(qū)域,圖表或者工具條,這些只是一些用Excel時(shí)想要控制的東西的舉例。這些東西就是對(duì)象。Excel含有超出一百種你可以通過(guò)不同方式操作的對(duì)象。所有的VB對(duì)象都被分層規(guī)類。一些對(duì)象本身又可能含有其它的對(duì)象,例如,Excel時(shí)一個(gè)應(yīng)用對(duì)象,這個(gè)應(yīng)用對(duì)象包含其它對(duì)象,例如工作簿或者命令條。工作簿對(duì)象可能

17、包含其它對(duì)象,如工作表或者圖表。你將在本章種學(xué)習(xí)如何控制以下Excel對(duì)象:區(qū)域,窗口,工作表,工作簿和應(yīng)用。我將“區(qū)域”列在了第一位置,有一個(gè)非常重要的原因,如果你不知道如何操作單元格區(qū)域的話,你基本上不能用電子表格來(lái)做什么。某些對(duì)象看上去相似。如果你打開(kāi)一個(gè)新工作簿,檢查它的工作表,你不會(huì)發(fā)現(xiàn)什么不同。一組相似的對(duì)象被稱為“集合”。例如,工作表的集合包含所有具體工作簿中的工作表;命令條的集合包含所有的工具條和菜單。集合同樣是對(duì)象。Excel中使用得最頻繁的集合是表(Sheets)集合,它代表所有的工作表和圖表,還有工作簿集合,工作表集合以及窗口集合。當(dāng)你使用集合時(shí),相同的動(dòng)作可以在這個(gè)集合

18、中所有的對(duì)象上執(zhí)行。每一種對(duì)象都有一些特征供你描述。在VB里,這些對(duì)象的特征被稱為“屬性”。例如,工作簿對(duì)象有名稱屬性;區(qū)域?qū)ο笥辛?,字體,公式,名稱,行,樣式和值等屬性。這些對(duì)象屬性是可以設(shè)置的。你通過(guò)設(shè)置對(duì)象的屬性控制對(duì)象的外觀和位置。對(duì)象屬性一次只能設(shè)置為一個(gè)特定的值。例如,當(dāng)前工作簿不可能同時(shí)有兩個(gè)不同的名稱。VB中最難理解的部分是有些屬性同時(shí)又可以是對(duì)象。想想?yún)^(qū)域(Range)對(duì)象,你可以通過(guò)設(shè)置字體顏色來(lái)改變選定單元格的外觀。但是,字體(Font)可以有不同的名稱(TimesNewRoman,Arial,),不同的字號(hào)(10,12,14,)和不同的樣式(粗體,斜體,下劃線,)。這些

19、是字體的屬性。如果字體有屬性,那么字體也是對(duì)象。屬性真是了不起,讓你改變對(duì)象的外觀,但是,如何控制這些操作呢?你在使Excel為你執(zhí)行任務(wù)之前,你需要知道另外一個(gè)術(shù)語(yǔ)。對(duì)象有方法。每一種你想要對(duì)象做的操作都被稱為“方法”。最重要的VB方法是Add方法。你可以使用這個(gè)方法添加一個(gè)新工作簿或者工作表。對(duì)象可以使用不同的方法。例如,區(qū)域(Range)對(duì)象有專門的方法讓你清除單元格內(nèi)容(ClearContents方法),清除格式(ClearFormats方法)以及同時(shí)清除內(nèi)容和格式(Clear方法)。還有讓你選擇,復(fù)制或移動(dòng)對(duì)象的方法。方法有可選擇的參數(shù)確定方法執(zhí)行的具體方式。例如,工作簿(Workb

20、ook)對(duì)象有一個(gè)叫關(guān)閉(Close)的方法。你可以使用它關(guān)閉任何打開(kāi)了的工作簿。如果工作簿有改動(dòng),Excel會(huì)彈出一個(gè)信息,問(wèn)你是否要保存變化。你可以使用關(guān)閉方法和設(shè)定它的保存變化(SaveChanges)參數(shù)為假(False)來(lái)關(guān)閉這個(gè)工作簿并且不管它的任何變化。正如例子:Workbooks(Chap01.XLS).CloseSaveChanges:二False6學(xué)習(xí)對(duì)象,屬性和方法當(dāng)你學(xué)習(xí)新的事物時(shí),理論會(huì)給你必須的背景,但是,你如何真正知道那是什么呢?大多數(shù)人習(xí)慣形象思維為了使Excel對(duì)象易于理解,VB在線幫助提供了一個(gè)對(duì)象模型,請(qǐng)看接下來(lái)的附圖。注意,Application對(duì)象位于

21、樹(shù)型圖的最上端,它實(shí)際上代表Excel本身。其它對(duì)象在較低的層次。假設(shè)你想要控制Range對(duì)象,在你能夠控制任何Excel對(duì)象之前,你必須對(duì)它創(chuàng)建引用。為了獲得下圖中的Range對(duì)象,只要遵照下面幾行代碼。每次看到樹(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ì)象

22、模型是一個(gè)學(xué)習(xí)Excel對(duì)象的非常好的方法。你花在這里的時(shí)間,以后你開(kāi)始編寫(xiě)VBA過(guò)程的時(shí)候,會(huì)給你加倍的回報(bào)。通常,你需要明確你引用的對(duì)象的名稱。現(xiàn)在,我們來(lái)點(diǎn)更具體的。假設(shè)你要清除單元格A4里的內(nèi)容。手動(dòng)做這個(gè)時(shí),只要選擇單元格A4然后按下鍵盤上的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里

23、的內(nèi)容。然而,如何使Excel清除工作簿Chap02.xls第一個(gè)工作表里單元格A4的內(nèi)容呢?我們?nèi)匀患僭O(shè)打開(kāi)了好幾個(gè)工作簿。圖2-4Excel對(duì)象樹(shù)型圖(第一頁(yè))譯者:原書(shū)圖25(工作簿對(duì)象樹(shù)型圖)已包含在內(nèi),故在此略過(guò))如果你不希望最后在錯(cuò)誤的工作簿或工作表里刪除了A4里的內(nèi)容,那么你必須寫(xiě)下詳細(xì)的指令,這樣VB就知道在哪里找這個(gè)單元格:Application.Workbooks(Chap02.xls).Worksheets(Sheetl).Range(A4).ClearContents l2上面的指令應(yīng)該寫(xiě)成一行,并且應(yīng)該從右到左閱讀:清除單元格A4里的內(nèi)容,這個(gè)單元格在一個(gè)叫“Shee

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

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

26、將在以后的章節(jié)中學(xué)習(xí)如何使用對(duì)象瀏覽器。7句法和文法既然現(xiàn)在你已經(jīng)知道了VBA的一些基本組成要素(對(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ī)則:規(guī)則1:引用對(duì)象的屬性如果這個(gè)屬性沒(méi)有自變量,使用下面的句法:Object.Prope

27、rty對(duì)象是一個(gè)占位符,是你放置你想要進(jìn)入的實(shí)際對(duì)象名稱的地方。屬性同樣也是一個(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)屬性,你可以選擇

28、一個(gè)和當(dāng)前單元格相對(duì)位置的單元格。Offset屬性需要兩個(gè)自變量,第一個(gè)自變量為行號(hào)(rowOffset)第二個(gè)是列號(hào)(columnOffset)。對(duì)象屬性自變量ActiveCellOffset()在上面的例子中,假設(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)(:=)。如果你使用帶名稱的自變量,你可以任意順序地列出它們,上面的指令也

29、可以寫(xiě)成這樣:ActiveCell.Offset(columnOffset:=2,rowOffset:=3)改后的指令沒(méi)有改變意思,你仍然指向單元格C4。然而,如果你改變ActiveCell.Offset(3,中)自變量的次序,結(jié)果你會(huì)指向D3,而不是C4。規(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=TimesNewRoman上面的指令將當(dāng)前單元格字體改為TimesNew

30、Roman邏輯值(True或False)ActiveCell.Font.Bold=True上面的指令設(shè)置當(dāng)前單元格的字體為粗體規(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。規(guī)則4:指向?qū)ο蟮姆椒ㄈ绻摲椒](méi)有自變量,那么句法應(yīng)該是Object.Method對(duì)象是一個(gè)占位符,是你放置你想要進(jìn)入的實(shí)際對(duì)象名稱的地方。方法同樣也是一個(gè)占位符,你可以在這里

31、放對(duì)象置要對(duì)該對(duì)象的進(jìn)行的操作的名稱。例如,可以使用下述指令來(lái)清除單元格A4的格式(譯者:應(yīng)該是內(nèi)容):方法Range(A4)ClearContents如果該方法可以使用自變量來(lái)限制,那么句法為:Object.Method(argument1,argument2,argumentN)例如,使用GoTo方法,你可以快速地選擇工作表里的任何區(qū)域。GoTo方法的句法為:Object.GoTo(Reference,Scroll)對(duì)象.GoTo(參照,窗滾動(dòng))Reference自變量是目標(biāo)單元格或者區(qū)域,Scroll!變量可以設(shè)定為真(True)讓Excel窗滾動(dòng)到該目標(biāo)地址出現(xiàn)在窗的左上角;或者設(shè)定為

32、假(False),窗不滾動(dòng)(譯者:系統(tǒng)默認(rèn)為False)。例如,下面的VBA語(yǔ)句選擇工作表Sheetl里的單元格P100,并且窗滾動(dòng):Application.GoTo_Reference:二Worksheets(Sheetl).Range(P100),_Scroll:=True上面的指令沒(méi)有固定在一行,使用了一條特殊的線(下劃線)將它分為幾段。下面的部分將講述這個(gè)。8打斷很長(zhǎng)的VBA語(yǔ)句盡管一行VBA代碼最多可以包含1024個(gè)字母,但是,為了使你個(gè)過(guò)程容易閱讀,最好將長(zhǎng)的語(yǔ)句打斷為兩行甚至多行。VB使用一個(gè)專門的連續(xù)線(下劃線)置于一行代碼的末尾,表明下一行是這行的連續(xù)。例如:Selectio

33、n.PasteSpecial_Paste:=xlValues,_Operation:=xlMultiply,_SkipBlanks:=False,_Transpose:二False這個(gè)連續(xù)符是下劃線,你必須在下劃線之后帶一個(gè)空格。你可以在下述幾種情況中使用連續(xù)符:運(yùn)算符之前或者之后。例如:&,+,Like,NOT,AND逗號(hào)之前或者之后冒號(hào)和等號(hào)(:=)之前或者之后等號(hào)之前或者之后你不可以在冒號(hào)和等于號(hào)之間使用連續(xù)符,例如,下面的代碼VB是不認(rèn)的:Selection.PasteSpecialPaste:_=xlValues,Operation:_=xlMultiply,SkipBlanks:_

34、二False,Transpose:_=FalseSelection.PasteSpecialPaste:_=xlValues,Operation:_=xlMultiply,SkipBlanks:_=False,Transpose:_=False同樣,在引號(hào)之內(nèi)的文本之間加連續(xù)符也是不對(duì)的,例如,下面的下劃線的使用是無(wú)效的MsgBoxTocontinuethelonginstruetion,usethe_linecontinuationcharacter.上面的指令應(yīng)該打斷為如下代碼:MsgBoxTocontinuethelonginstruetion,usethe&linecontinuati

35、oncharacter.9了解VBA錯(cuò)誤在編寫(xiě)或編輯VBA過(guò)程之中,無(wú)論你多名小心,出錯(cuò)的可能性還是很打的。例如,你可以錯(cuò)誤拼寫(xiě)一語(yǔ)句,放錯(cuò)了一個(gè)逗號(hào)或引號(hào),或者忘記了一個(gè)句號(hào)或右括號(hào)。這些類型的錯(cuò)誤稱為句法錯(cuò)誤。幸運(yùn)的是,VB比較容易幫助你發(fā)現(xiàn)這種類型的錯(cuò)誤。為了讓VB在你輸入一行代碼后,自動(dòng)幫你檢測(cè)語(yǔ)法的正確性,你需要在VB窗口的“工具”“選項(xiàng)”里,確保勾選了“編輯器”頁(yè)上的“自動(dòng)語(yǔ)法檢測(cè)”。圖2-7選項(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)圖2-8)或者其它在選項(xiàng)對(duì)話框“編輯器格式”頁(yè)

36、設(shè)定的顏色。如果錯(cuò)誤信息框上的解釋不夠清楚,你總是可以點(diǎn)擊“幫助”按鈕尋求更多的幫助。再如果VB在線幫助無(wú)法給你提供正確的方向,那么返回你的程序,仔細(xì)檢查有誤的那行代碼是否漏掉了字母,引號(hào),句號(hào),冒號(hào),等于號(hào),左括號(hào)和右括號(hào)等。SubVhatsInACellOS&lectiorL.SpecialCells(slCelirypeConstantzs2).SelectWithSeis匚tioilFcirrtNam.Fem.SizStr.Sup.SubOutMicrosoftVluaI編譯錯(cuò)誤;2d語(yǔ)注錯(cuò)餞EndEhFangE(EEi).SeIeut3SpeciwlUELlszKlCElLTypeC

37、cinstants1)SeIegI:IVrthSelection.Font.Name=17ArialFnrrt-S+irlp=Fpfii1bt圖2-8這個(gè)錯(cuò)誤由于漏掉了常數(shù)xlCellType前面的括號(hào)而產(chǎn)生GI用)V|IlLatsIiJLCe:SubKhatslnACe11()Hicrcsofl:VisualBasicSelectzLorL.SpecialCellE(KlCellTypeCoiiEtaritEj2).Selectlith運(yùn)行時(shí)錯(cuò)誤J100:方法Range作用于對(duì)象GLMal時(shí)失敗EndVKargeSelecEh.繼續(xù)Q1結(jié)束(E)調(diào)試)|幫肋(H).Name-Arial17F

38、ontSivie=Rewula匚圖2-9當(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ì)使用的指令如I語(yǔ)句和循環(huán)結(jié)構(gòu),而造成的錯(cuò)誤。技巧25:程序調(diào)試你很可能不只一次聽(tīng)過(guò)“計(jì)算機(jī)程序里充滿了錯(cuò)誤”。在編程里,錯(cuò)誤就被稱為“bug”(錯(cuò)誤,漏洞),而“調(diào)試”(debug)則是給你的程序除錯(cuò)的過(guò)程。調(diào)試的第一步就是改正所有的語(yǔ)法錯(cuò)誤。VB提供了無(wú)數(shù)種工具,你可以使用它們來(lái)追蹤和消除錯(cuò)誤。在本

39、章中,你將知道如何使用VB助手幫助你在編寫(xiě)程序時(shí)出現(xiàn)盡可能少的錯(cuò)誤;在第十三章中,你將學(xué)習(xí)如何使用專門的調(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)有首先檢查是否用戶插入軟盤并關(guān)閉軟驅(qū)口而試圖復(fù)制一個(gè)文件到軟盤,這時(shí)就會(huì)發(fā)生運(yùn)行時(shí)間錯(cuò)誤。第三種錯(cuò)誤邏輯錯(cuò)誤,通常不會(huì)發(fā)出明確的錯(cuò)誤信息。過(guò)程可能沒(méi)有語(yǔ)法錯(cuò)誤,甚至運(yùn)行無(wú)誤,然而,得到的卻是錯(cuò)誤的結(jié)果。邏輯錯(cuò)誤

40、通常非常難以查找,并且它藏得很隱秘,間歇發(fā)生,你不能指望花幾個(gè)小時(shí)甚至幾天,就能找到錯(cuò)誤源。10查找?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ǔ),你將驚訝于你如何快地從VB代碼窗找到需要的幫助頁(yè)面。讓我們來(lái)檢查你如何通過(guò)內(nèi)置的VBA老師的幫助,將WhatsInA

41、Cell過(guò)程里的第一句變成你自己的VBA詞匯:Selection.SpecialCells(xlCellTypeConstants,2).Select上面的指令可以打斷為三部分,哪些部分?Selection是對(duì)象還是屬性?SpecialCell是什么?Select是什么?要回答這些問(wèn)題,請(qǐng)依照下面的操作:激活你要分析的過(guò)程的代碼窗口點(diǎn)擊你不懂的詞語(yǔ)按下F1圖2-10VBA的對(duì)象,屬性和方法在在線幫助里解釋得很詳細(xì)幫助就會(huì)顯示相應(yīng)的頁(yè)面。如果你的光標(biāo)放在詞語(yǔ)“Selection”中間,你就會(huì)知道Selection可以是一個(gè)應(yīng)用程序的屬性,也可以是一個(gè)窗對(duì)象。如果你的光標(biāo)在下一個(gè)不明白的術(shù)語(yǔ)(Sp

42、ecialCell)并且按上面的步驟再做一遍后,你將看到SpecialCell幫助屏幕(參見(jiàn)圖2-10)。注意,每個(gè)幫助主題包含許多信息。被查找的指令類型顯示在幫助窗的上面;指令的類型允許詞語(yǔ)分類。例如,SpecialCell是方法,可以使用這個(gè)方法的對(duì)象名稱列在“應(yīng)用于”下面(譯者:點(diǎn)擊“應(yīng)用于”,出現(xiàn)對(duì)象名稱列表)。指令名稱下面的“參閱”和“示例”讓你快速地跳到其它應(yīng)用或意義相似的指令,以及查看使用這個(gè)指令的例子。指令的意義顯示在“參閱”和“示例”標(biāo)題的下面。接下來(lái)則是語(yǔ)法和需要的自變量和其它參數(shù)?!罢f(shuō)明”部分給出一些推薦使用該指令的情形。你可以很容易地將示例中的代碼復(fù)制到你的過(guò)程中去:選

43、中你要復(fù)制的代碼行,按下Ctrl+C,或者單擊右鍵,選擇快捷菜單上的“復(fù)制”,然后切換到VB代碼窗,點(diǎn)擊你需要粘貼代碼的地方,再按下Ctrl+V或者選擇“編輯”-“粘貼”。11語(yǔ)法和編程快捷助手VB編輯器窗上的“編輯”工具條上有很多按鈕,幫助你快速容易地輸入正確格式的VBA指令。如果“編輯”工具條目前在VB編輯器窗上不可連接,那么你可以選擇“視圖”-“工具條”圖211編輯工具條上的按鈕使得編寫(xiě)程序和設(shè)置指令格式變得很容易在VB中編寫(xiě)過(guò)程需要你使用成百上千的內(nèi)置指令和函數(shù)。因?yàn)榇蠖鄶?shù)人們無(wú)法學(xué)習(xí)所有VBA里可用指令的語(yǔ)法,IntelliSens提供了你所需求的語(yǔ)法和編程幫助。當(dāng)你在代碼窗編程時(shí),

44、經(jīng)常會(huì)有專門的窗彈出來(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)列出成員”。圖2-12在輸入VBA指令時(shí),VB會(huì)建議可以用于該對(duì)象的屬性和方法01用j|lnVevSheetCirrticmEsTilicitSubInNewSheet0worksheets.|EndSub匡羅Applicatiun協(xié)CopyCoUTlt竺唇Ilel

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

46、號(hào)后),并且在快捷菜單上選擇“屬性/方法列表”選擇“編輯”-“屬性/方法列表”點(diǎn)擊“編輯器”工具條上的“屬性/方法列表”按鈕13常數(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ù)類型和使用。假設(shè)你需要你的程序打開(kāi)Excel工作表上的分頁(yè)預(yù)覽?!熬庉嫛保ㄗg者:視圖)菜單上有兩個(gè)選擇:普通視圖和分頁(yè)預(yù)

47、覽。普通視圖是絕大多數(shù)Excel任務(wù)的默認(rèn)視圖模式;分頁(yè)預(yù)覽則是編輯視圖,顯示工作表中有內(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ù)列表菜單。|GE用)二|ForkulasOnOffOntionEKrlicitSubFarjukilasOnOfTActiveWindow.Displ

48、ayFormulas=NotActiveWindoui.Display-Formulasactivewindow.View=EndSubdiffermalView1IXIkIFageBre:iMrevi已刊|三辱_1卜廠圖213常數(shù)列表彈出菜單顯示了對(duì)敲入的屬性有效的常數(shù)清單14參數(shù)信息如果你有過(guò)使用Excel函數(shù)的經(jīng)歷,你就會(huì)知道許多函數(shù)需要一個(gè)或者多個(gè)自變量(或者參數(shù))。如果VB函數(shù)要求自變量,你可以在輸入左括號(hào)后在光標(biāo)下面看到一個(gè)提示框,顯示必要的或可選的自變量的名稱(參見(jiàn)圖2-14)。參數(shù)信息幫你很容易地給VBA函數(shù)設(shè)置參數(shù)。另外,它提醒你其它兩件對(duì)函數(shù)運(yùn)行正確至關(guān)重要的事情:自變量的

49、順序和自變量要求的數(shù)據(jù)類型。你將在下一章里學(xué)習(xí)數(shù)據(jù)類型。在代碼窗口里面輸入下述代碼,看看參數(shù)信息是如何工作的:ActiveWorkbook.SaveAs(1趣用)|卩明)OptionExplicitactiveworkbook.Saveks(SaversJma*尸呂殆柑廠比jtrjtcuEmsF呂wsm口廠比丹日血nJJ田eucwx陽(yáng)_口口中虬reaieuPacJnap!Jccpss.ifpQfeAsXlSaveAsAccessMode=jilKoChgefpjiljcpJetjs/gij1p.Krje.,re-rfffiiiLaypfftllPFaJ|)出上1zr圖2-14Atipwindo

50、wdisplaysalistofargumentsutilizedbyaVBAfunctionorinstruction.你一旦輸入了開(kāi)始的括號(hào),光標(biāo)的下面就會(huì)出現(xiàn)一個(gè)提示框,當(dāng)前的自變量會(huì)顯示為粗體;當(dāng)你輸入完第一個(gè)自變量并且輸入了逗號(hào),VB會(huì)將下一個(gè)自變量為粗體??蛇x的自變量會(huì)用中括號(hào)括起來(lái)。只要按下Esc鍵就可以關(guān)閉參數(shù)信息窗口。如何使用鍵盤來(lái)打開(kāi)提示窗口?輸入指令或函數(shù),緊接著是左括號(hào),然后按下Ctrl+Shift+I你也可以點(diǎn)擊編輯菜單上的參數(shù)信息按鈕或者選擇“編輯”-“參數(shù)信息”。15快速信息當(dāng)你選擇了代碼窗口里的指令,函數(shù),方法,過(guò)程名稱或者常數(shù),然后點(diǎn)擊編輯工具條上的“快速信息

51、”按鈕(或者按下Ctrl+I),VB將會(huì)顯示突出顯示項(xiàng)目的語(yǔ)法和常數(shù)的值。快速信息可以通過(guò)選項(xiàng)對(duì)話框來(lái)打開(kāi)或者關(guān)閉。在編輯器頁(yè),勾選“自動(dòng)顯示快速信息”,打開(kāi)快速信息功能。SubForTmlsLsOnf0End.ActiveTindovA.sWiRdow.DisplayFormulas圖2-15快速信息提供函數(shù)參數(shù)清單,也可以是常數(shù)值和VBA語(yǔ)句語(yǔ)法16自動(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í)間。例

52、如,在代碼窗里輸入關(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)鍵字Application的前三個(gè)字母,按工具條上的自動(dòng)完成關(guān)鍵字按鈕,然后在彈出菜單上選取合適的關(guān)鍵字。17縮進(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寬度”文

53、本框里的數(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)建這種類型的VB指令。現(xiàn)在,我們來(lái)練習(xí)使用縮進(jìn)和凸出代碼行,用第一章里的宏WhatsInACell作為例子:在工程瀏覽器窗,選擇FirstSteps(Chap01.xls工程,并且激活含有WhatslnACell代碼的WorksheetFormatting模塊選擇開(kāi)始為關(guān)鍵字With和結(jié)束為EndWith的一段代碼點(diǎn)擊編輯工具條上的縮進(jìn)按鈕,或者按

54、鍵盤上的Tab鍵(譯者:按Tab鍵需要將光標(biāo)放在行首,而非選中指令)選中的指令會(huì)向右移動(dòng)4個(gè)字母的位置,如果使用了Tab寬度的默認(rèn)設(shè)置。點(diǎn)擊編輯工具條上的“凸出”按鈕,或者按Shift+Tab將選中的指令行返回原來(lái)的位置??s進(jìn)和凸出同樣可以在編輯菜單里找到。18設(shè)置注釋塊/解除注釋塊在第一章中,你學(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ì)大多

55、數(shù)人來(lái)說(shuō),需要注釋掉一行代碼的話,只有在它前面敲入一個(gè)引號(hào)就可以了,但是,如果要注釋掉整塊代碼,使用“編輯”工具條上的“設(shè)置注釋塊”和“解除注釋塊”按鈕則是很方便的。要注釋掉幾行代碼,只要選中這些代碼行并且點(diǎn)擊“設(shè)置注釋塊”按鈕。點(diǎn)擊“解除注釋塊”按鈕,將注釋掉的代碼恢復(fù)到代碼里。如果你沒(méi)有選中文本,就點(diǎn)擊了“設(shè)置注釋塊”按鈕,只有在光標(biāo)所在的代碼行前面加入引號(hào)。19使用對(duì)象瀏覽器如果你想要在VBA眾多的組件和功能中自由切換,那么使用對(duì)象瀏覽器。這個(gè)專門的內(nèi)置工具在VB編輯器窗口是可用的。使用下面任何一種方法都可以訪問(wèn)對(duì)象瀏覽器:圖2-16對(duì)象瀏覽器讓你在當(dāng)前VBA工程里可用的所有對(duì)象,屬性和

56、方法里瀏覽按F2選擇“視圖”“對(duì)象瀏覽器”點(diǎn)擊工具條上的“對(duì)象瀏覽器”按鈕對(duì)象瀏覽器讓你瀏覽VBA過(guò)程中可用的對(duì)象,也可以查看它們的屬性,方法和事件。在對(duì)象瀏覽器的幫助下,你可以在VBA工程的多個(gè)過(guò)程之間快速移動(dòng)。對(duì)象瀏覽器分為三部分(參見(jiàn)圖216)。窗口的上部顯示“工程/庫(kù)”下拉列表,這里列出了所有庫(kù)名稱以及當(dāng)前VBA工程里可用的所有工程名稱。庫(kù)是包含一個(gè)應(yīng)用程序里對(duì)象的信息的專門文件。新的庫(kù)可以通過(guò)“引用”對(duì)話框(“工具”“引用”)來(lái)添加。所有庫(kù)列出了你電腦上安裝了的所有庫(kù)中的所有對(duì)象。當(dāng)你選擇一個(gè)叫“Excel”的庫(kù)時(shí),僅僅能在Excel里執(zhí)行的對(duì)象名稱才能被看到。和Excel庫(kù)相反,V

57、BA庫(kù)列出了所有能在VBA里執(zhí)行的對(duì)象名稱。在“工程/庫(kù)”下拉列表框下面,有一個(gè)“搜索”文本框,讓你可以快速地在某個(gè)庫(kù)里搜索你的信息。這個(gè)地方會(huì)記住你最近搜索的四個(gè)項(xiàng)目。在對(duì)象瀏覽器的任何地方單擊右鍵,在快捷菜單上選擇“全字匹配”,你就可以只搜索匹配整個(gè)字的內(nèi)容。對(duì)象瀏覽器上的“搜索結(jié)果”(參見(jiàn)圖216和217)顯示符合搜索條件的庫(kù),類和成員。當(dāng)你輸入搜索文本并且單擊搜索按鈕,VB展開(kāi)對(duì)象瀏覽器對(duì)話框以顯示搜索結(jié)果。你可以點(diǎn)擊“望遠(yuǎn)鏡”按鈕右邊的“顯示/隱藏搜索結(jié)果”來(lái)顯示或者隱藏搜索結(jié)果。庫(kù)I成貝Ikon呼kEncel叭Excel畫(huà)InputMseeage應(yīng)*InputTi口2匡郢衛(wèi)辿阻理些

58、AjrisTitit:B:ilLooiLkutoFiltarjViituRecoverAjEtEApplication-的成員.:FimiFile上J。金(J已tCu51LifTlLl烏11:i:mt已TLt5衛(wèi)*GetCuetc-rTiLietIbjjriGetljperiF11erL:me?矗GetPhurLetic:金GetSaveiiJiL已n迫m已;*1JutoHelp:呂iTLchteTi:Fciinte:金遼衛(wèi)吏丄左衛(wèi)坯hJFIJlLCticnInp-atBox(J?rp.iiyri_s廠丄鬲jje,j-Ce/sEiiiu/上”丁即.jp_nte_r匕網(wǎng)衛(wèi)丁eEhc.JlpdI匚

59、住七ion的成更圖217在對(duì)象瀏覽器里搜索答案類列表框顯示所選中的庫(kù)里面所有可用的對(duì)象類,如果你選擇VBA工程,列表顯示該工程里的對(duì)象。在圖2-16里,CommandBarComboBox對(duì)象類被選中了。當(dāng)你選中一個(gè)類,右邊的列表(成員)顯示該類可用的屬性,方法和事件。圖2-16上顯示了類CommandBarComboBox的一些成員。成員默認(rèn)地按字母順序列出。然而,你可以使用對(duì)象瀏覽器快捷菜單上的“組成員”來(lái)組織這些成員列表(屬性,方法或事件)。如果你選擇“工程/庫(kù)”里面的VBA工程,成員列表框列出該工程里的所有過(guò)程。雙擊該過(guò)程名稱,就可以進(jìn)入該過(guò)程并檢查其代碼。如果你選擇類“VBA”,你將

60、看到VB內(nèi)置的函數(shù)和常數(shù)。如果你對(duì)所選的類或成員需要更多的信息,可以點(diǎn)擊對(duì)象瀏覽器窗口上面的問(wèn)號(hào)按鈕。對(duì)象瀏覽器下面的窗口顯示所選成員的代碼格式。如果你點(diǎn)擊代碼格式里綠色的連接部分,你將跳到對(duì)象瀏覽器窗口的所選成員的類或庫(kù)。代碼格式里的代碼可以被復(fù)制到Windows剪切板并且粘貼到代碼窗里去。如果對(duì)象瀏覽器和代碼窗都是可見(jiàn)的,你只要選中代碼格式里的文本,直接拖曳到代碼窗口就行了。通過(guò)對(duì)象瀏覽器窗上的橫豎分割線,你可以輕易地改變各個(gè)窗的大小。你已經(jīng)發(fā)現(xiàn)了對(duì)象瀏覽器,你也許在想你如何才能讓它幫助你進(jìn)行VBA編程。假設(shè)你在工作表中央放置了一個(gè)文本框,你如何讓Excel將這個(gè)文本框移動(dòng)到工作表的左上方

溫馨提示

  • 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)論