版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、第二章 VBA 第一步作者:Julitta Korol 翻譯:Tiger Chen Nov 28 2004語言學(xué)習(xí)是一個長期的活動,在此過程中,你會經(jīng)歷不同的階段,由生疏到熟悉。學(xué)習(xí)VBA編程也是一樣的,沒有捷徑。要想精通VBA,你必須從一個初級階段起步(第二至四章)。只有當(dāng)你對VBA后面的一些基本的東西有了很好的理解之后,才能提高到中級階段(第五至七章)和高級階段(第八至十七章)。但是,重要的事情先來。在你能夠用VBA自由自在地控制Excel之前,你需要獲得一些你的術(shù)語和語法。在VB里,如何表達這些?“在工作簿里添加一個新工作表”,“刪除單元格A5的內(nèi)容”,“將單元格A1的公式復(fù)制到單元格B
2、1”?你也許知道這些單個的詞語,然而,你怎么知道如何將它們正確地組合在一起,Excel才能執(zhí)行這些任務(wù)?你將在本章中學(xué)習(xí)VBA的術(shù)語和規(guī)則。了解指令,模塊和過程在第一章,你學(xué)習(xí)到了Excel宏錄制器創(chuàng)建的一系列指令是和你實際進行的操作完全等同的。這些指令自動地放在工作簿里一個叫做“模塊”的表里。Excel將模塊儲存在模塊文件夾里,這個文件夾在當(dāng)前工作簿,新工作簿或者個人宏工作簿里面。你必須激活VB編輯器窗口,并且雙擊工程瀏覽器里的模塊文件夾才能查看到這些模塊。當(dāng)模塊表在代碼窗口里打開了后,你才能最后分析你的過程代碼。所有錄制的指令都包括在“過程”里面。過程里面的每一行都是一個“指令”。指令的類
3、型有很多中,例如,關(guān)鍵詞,運算符,或者其它過程的調(diào)用?!瓣P(guān)鍵詞”代表VB中的一個特殊的意義。在第一章中,你學(xué)習(xí)了最常見的VBA關(guān)鍵詞Sub 和End Sub,它們表示一個過程的開始和結(jié)束。關(guān)鍵詞默認地顯示為藍色。你不要將這些術(shù)語做其它的目的,因為關(guān)鍵詞已經(jīng)被VB保護了。除了關(guān)鍵詞,VB指令里還可以有運算符。運算符有四種類型:算術(shù)運算,字符串連接,邏輯運算和比較運算?!斑\算符”允許你將某些值結(jié)合起來。例如,減號運算符(/)可以用來計算總數(shù)的百分比。本書中,你有很多機會看到如何在VBA過程中使用運算符。VB指令的另外一種類型是過程調(diào)用。過程調(diào)用讓你快速地跳到其它過程并且執(zhí)行其它指令。是不是很難想象
4、?讓我們看一下你在第一章中錄制的宏WhatsInACell。 假設(shè)你也需要包含同一模塊中宏FormulasOnOff中的一些語句。怎么做呢?你可以復(fù)制需要的代碼行,再粘貼過去。然而,有一種更簡單快速的方法。你可以調(diào)用這個過程,而不需要在兩個過程中復(fù)制。例如,你想VB在遇到指令MsgBox "所有操作都已完成"之前執(zhí)行宏FormulasOnOff里面的指令,只要添加下面一句代碼就行:FormulasOnOff當(dāng)VB到達這一行,它就會立即跳到FormulasOnOff過程并且執(zhí)行它的代碼。之后,它會回到宏WhatsInACell去執(zhí)行剩下的代碼,遇到關(guān)鍵詞End Sub時則停止
5、。在你嘗試這個例子之前,你必須學(xué)會如何給VBA過程和模塊命名,已經(jīng)如何調(diào)用不同工程里的過程。VBA工程命名工程是一套Excel對象,模塊,窗體和引用。除了VBAProject這個位于工程瀏覽器中工作簿名稱之前默認名稱,每個工程需要一個獨特的名稱。我們來給VBAProject (Chap01.xls) 和 VBAProject (Personal.xls)命名:1. 啟動Excel,打開Chap01.xls,這里儲存了宏WhatsInACell代碼。你錄制了宏FormulasOnOff的個人宏工作簿會自動開啟2. 切換到VB編輯器窗口3. 選擇VBAProject (Chap01.xls)4.
6、雙擊屬性窗口里的名稱屬性,這個操作選中了默認的工程名稱VBAProject5. 輸入“FirstSteps”作為該VBA工程的名稱,回車。注意,工程瀏覽器現(xiàn)在顯示的是名稱是FirstSteps (Chap01.xls)6. 在工程瀏覽窗口選擇VBAProject (Personal.xls)7. 雙擊屬性里的名稱屬性8. 輸入“Personal”作為它的名稱,回車技巧21 避免名稱沖突為了避免VBA工程之間的命名沖突,請給你的工程獨特的名稱。你可以使用下述方法之一來更改工程名稱:§ 在工程瀏覽器窗口,選擇工程名稱,雙擊屬性窗口里的名稱屬性,再輸入新的名稱§ 在工程瀏覽器窗口
7、,在工程名稱上單擊右鍵,并且選擇“工程名稱屬性”。出現(xiàn)如圖21顯示的工程屬性對話框,在工程名稱文本框里面輸入新的名稱圖21 工程屬性窗口可以用來更改當(dāng)前被選中的工程名稱和描述模塊重命名當(dāng)你錄制宏或者創(chuàng)建新的過程時,VB會創(chuàng)建一個模塊文件夾來儲存你的VBA 代碼。 第一個文件夾叫“模塊1”,第二個叫“模塊2”,等等。你打開一個新的工作簿并且創(chuàng)建VBA工程時,新VBA工程里的模塊文件夾又會命名為“模塊1”,“模塊2”,等等。模塊擁有相同的名稱不但對你,而且對VB造成很大混淆,因為,它要在一個打開許多工程的環(huán)境中執(zhí)行你的宏或工程。為了避免模塊混淆,給FirstSteps (Chap01.xls) 工
8、程和 Personal (Personal.xls) 工程里的“模塊1”重新命名:1. 在工程瀏覽器窗口,選擇FirstSteps (Chap01.xls)工程,并且選擇“模塊1”2. 雙擊屬性窗口里的名稱屬性,這個動作選中了模塊的默認名稱“模塊1”3. 輸入“WorksheetFormatting”作為模塊1的名稱,并且回車。注意,工程瀏覽器窗口現(xiàn)在顯示的模塊名稱是“WorksheetFormatting”4. 在工程瀏覽器窗口選擇Personal (Personal.xls)5. 雙擊屬性窗口里的名稱屬性6. 輸入“Switches”作為模塊1的名稱,回車圖22 工程瀏覽器窗口顯示通過屬性
9、窗口給工程和模塊設(shè)置的獨特名稱從其它工程調(diào)用過程你只要明確過程名稱,就可以調(diào)用這個在同一個工程里任何模塊里的過程。假設(shè)過程FormulasOnOff和宏WhatsInACell在同一個工程里的不同模塊(或者同一個模塊),在WhatsInACell宏里面調(diào)用過程FormulasOnOff,你所要做的所有工作只是明確過程名稱,示例如下:Sub WhatsInACell() <這里是你錄制的指令> FormulasOnOff End Sub 然而,如果兩個或者兩個以上的模塊含有這個相同的過程名稱,你除了要明確過程名稱外,還必須包括模塊名稱。假設(shè)工程FirstSteps (Chap01.x
10、ls)有三個模塊。模塊FormulaFormatting包含宏WhatsInACell,但是,模塊Switches和模塊Formulas都含有一個叫FormulasOnOff的宏。如何在WhatsInACell調(diào)用FormulasOnOff(模塊Switches里面的)?請看下面例子:Sub WhatsInACell() <這里是你錄制的指令> Switches.FormulasOnOff End Sub 要調(diào)用其它工程里的過程,你必須建立對該工程的引用。你可以在“引用”對話框進行這些操作。因為FormulasOnOff在Personal (Personal.xls)工程里,在你能
11、夠從WhatsInACell調(diào)用它之前,你需要添加對“Personal”的引用。下面是幾種建立引用的方法:1. 在工程瀏覽器窗口,點擊FirstSteps (Chap01.xls)2. 選擇“工具”“引用”3. 在引用對話框,選中“Personal”旁邊的勾選框(參見圖23),然后點擊確定(譯者:在截圖前,我并沒有保存Personal,所以在附圖里沒有Personal一行,如果你依照書中一步一步走下來,應(yīng)該沒有問題)圖23 引用對話框列出了所有這個工程可以引用的工程。如果你想要執(zhí)行其它工程里的過程,你就必須建立對這個工程的引用既然對“Personal”工程的引用已經(jīng)建立了,我們就來從Whats
12、InACell里調(diào)用FormulasOnOff吧。1. 在工程瀏覽器窗口,選擇FirstSteps (Chap01.xls)并且定位到含有WhatsInACell的模塊2. 在MsgBox "所有操作都已完成"之前增加一空白行,并且輸入代碼:FormulasOnOff3. 返回到Excel界面,確保當(dāng)前工作表是這個例子數(shù)據(jù)(參見第一章的圖11)4. 使用任何你在第一章里學(xué)到的方法來運行宏WhatsInACell如果你給兩個不同工程里的不同過程以相同的名稱,那么你必須明確工程名稱才能調(diào)用它。我們假設(shè)FirstSteps (Chap01.xls)工程和Personal (Per
13、sonal.xls) 工程里都有叫FormulasOnOff的宏,要調(diào)用Personal (Personal.xls)工程里的FormulasOnOff(記住,你已經(jīng)必須先建立對Personal的引用),必須包括工程名稱:Sub WhatsInACell ( ) <這里是你錄制的指令> Personal.Switches.FormulasOnOff End Sub 技巧22 VB如何定位被調(diào)用的過程當(dāng)你調(diào)用一個過程,VB先在主調(diào)方(WhatsInACell)的同一個模塊里查找。如果沒有找到被調(diào)過程(FormulasOnOff),VB就會在同一個工程的其它模塊里查找。如果還是找不到,
14、VB則會檢查對其它工程的引用。技巧23 工程名稱不在引用對話框如果你想要調(diào)用一個當(dāng)前關(guān)閉的工程里的過程,當(dāng)你打開引用對話框試圖建立引用時,這個過程名稱不在清單中。點擊“瀏覽”,并且打開被調(diào)用過程所在的文件夾。添加引用的對話框默認地列出數(shù)據(jù)庫文件(*.olb, .tlb, .dll)。從文件類型的下拉清單中選擇Excel文件(*.xls, *.xla),選擇并打開含有你要調(diào)用過程的文件。這個工程的名稱將會加在引用對話框的最后一行。了解對象,屬性和方法使用VBA,你可以創(chuàng)建工程控制Excel的許多東西,你同樣也可以控制很多其它的應(yīng)用程序。VB的偉大來自于它的控制和管理各種各樣的對象的能力。但是,“
15、對象”是什么呢?“對象”是你通過VBA控制的東西。工作簿,工作表,工作表里的單元格區(qū)域,圖表或者工具條,這些只是一些用Excel時想要控制的東西的舉例。這些東西就是對象。Excel含有超出一百種你可以通過不同方式操作的對象。所有的VB對象都被分層規(guī)類。一些對象本身又可能含有其它的對象,例如,Excel時一個應(yīng)用對象,這個應(yīng)用對象包含其它對象,例如工作簿或者命令條。工作簿對象可能包含其它對象,如工作表或者圖表。你將在本章種學(xué)習(xí)如何控制以下Excel對象:區(qū)域,窗口,工作表,工作簿和應(yīng)用。我將“區(qū)域”列在了第一位置,有一個非常重要的原因,如果你不知道如何操作單元格區(qū)域的話,你基本上不能用電子表格來
16、做什么。某些對象看上去相似。如果你打開一個新工作簿,檢查它的工作表,你不會發(fā)現(xiàn)什么不同。一組相似的對象被稱為“集合”。例如,工作表的集合包含所有具體工作簿中的工作表;命令條的集合包含所有的工具條和菜單。集合同樣是對象。Excel中使用得最頻繁的集合是表(Sheets)集合,它代表所有的工作表和圖表,還有工作簿集合,工作表集合以及窗口集合。當(dāng)你使用集合時,相同的動作可以在這個集合中所有的對象上執(zhí)行。每一種對象都有一些特征供你描述。在VB里,這些對象的特征被稱為“屬性”。例如,工作簿對象有名稱屬性;區(qū)域?qū)ο笥辛?,字體,公式,名稱,行,樣式和值等屬性。這些對象屬性是可以設(shè)置的。你通過設(shè)置對象的屬性控
17、制對象的外觀和位置。對象屬性一次只能設(shè)置為一個特定的值。例如,當(dāng)前工作簿不可能同時有兩個不同的名稱。VB中最難理解的部分是有些屬性同時又可以是對象。想想?yún)^(qū)域(Range)對象,你可以通過設(shè)置字體顏色來改變選定單元格的外觀。但是,字體(Font)可以有不同的名稱(Times New Roman, Arial, ),不同的字號(10,12,14,)和不同的樣式(粗體,斜體,下劃線,)。這些是字體的屬性。如果字體有屬性,那么字體也是對象。屬性真是了不起,讓你改變對象的外觀,但是,如何控制這些操作呢?你在使Excel為你執(zhí)行任務(wù)之前,你需要知道另外一個術(shù)語。對象有方法。每一種你想要對象做的操作都被稱為
18、“方法”。最重要的VB方法是Add方法。你可以使用這個方法添加一個新工作簿或者工作表。對象可以使用不同的方法。例如,區(qū)域(Range)對象有專門的方法讓你清除單元格內(nèi)容(ClearContents方法), 清除格式(ClearFormats方法)以及同時清除內(nèi)容和格式(Clear方法)。還有讓你選擇,復(fù)制或移動對象的方法。方法有可選擇的參數(shù)確定方法執(zhí)行的具體方式。例如,工作簿(Workbook)對象有一個叫關(guān)閉(Close)的方法。你可以使用它關(guān)閉任何打開了的工作簿。如果工作簿有改動,Excel會彈出一個信息,問你是否要保存變化。你可以使用關(guān)閉方法和設(shè)定它的保存變化(SaveChanges)參
19、數(shù)為假(False)來關(guān)閉這個工作簿并且不管它的任何變化。正如例子:Workbooks("Chap01.XLS").Close SaveChanges:=False學(xué)習(xí)對象,屬性和方法當(dāng)你學(xué)習(xí)新的事物時,理論會給你必須的背景,但是,你如何真正知道那是什么呢?大多數(shù)人習(xí)慣形象思維,為了使Excel對象易于理解,VB在線幫助提供了一個對象模型,請看接下來的附圖。注意,Application對象位于樹型圖的最上端,它實際上代表Excel本身。其它對象在較低的層次。假設(shè)你想要控制Range對象,在你能夠控制任何Excel對象之前,你必須對它創(chuàng)建引用。為了獲得下圖中的Range對象,
20、只要遵照下面幾行代碼。每次看到樹型圖中的線指向不同的層時,你只要巧妙地將線換成一個逗點運算符(停頓,英文狀態(tài)下的句號)。這樣,最終你會以下面的方式到達Range對象:Application.Workbook.Worksheet.Range你可以使用Excel對象樹型圖來尋找到其它對象的路徑,例如窗口(Window),批注(Comment),自動篩選(AutoFilter)或者繪圖區(qū)(ChartArea)。分析對象模型是一個學(xué)習(xí)Excel對象的非常好的方法。你花在這里的時間,以后你開始編寫VBA過程的時候,會給你加倍的回報。通常,你需要明確你引用的對象的名稱?,F(xiàn)在,我們來點更具體的。假設(shè)你要清除
21、單元格A4里的內(nèi)容。手動做這個時,只要選擇單元格A4然后按下鍵盤上的Delete鍵就可以了。用VB做同樣的操作,你首先需要知道如何使Excel選中了正確的單元格。單元格A4和其它的工作表單元格一樣,是Range對象。VB沒有Delete方法來清除單元格內(nèi)容,取而代之的是ClearContents方法,例如:Range("A4").ClearContents注意在對象名稱和方法之間的逗點運算符。這個指令去除單元格A4里的內(nèi)容。然而,如何使Excel清除工作簿Chap02.xls第一個工作表里單元格A4的內(nèi)容呢?我們?nèi)匀患僭O(shè)打開了好幾個工作簿。圖24 Excel對象樹型圖(第一
22、頁)(譯者:原書圖25(工作簿對象樹型圖)已包含在內(nèi),故在此略過)如果你不希望最后在錯誤的工作簿或工作表里刪除了A4里的內(nèi)容,那么你必須寫下詳細的指令,這樣VB就知道在哪里找這個單元格:Application.Workbooks("Chap02.xls").Worksheets("Sheet1") .Range("A4").ClearContents上面的指令應(yīng)該寫成一行,并且應(yīng)該從右到左閱讀:清除單元格A4里的內(nèi)容,這個單元格在一個叫“Sheet1”的工作表里,而這個工作表又在一個叫“Chap02.xls”的工作簿里面,工作簿“Ch
23、ap02.xls”又應(yīng)該是Excel應(yīng)用程序的一部分。注意,集合名稱的后面帶有一個字母“s”:Workbooks和Worksheets。所有引用的工作簿,工作表或單元格名稱都必須用引號(譯者:英文狀態(tài)的引號)包括起來。如何找到Excel對象樹型圖?選擇Excel界面上的“幫助” “Excel幫助”“編程信息”“微軟Excel VB參考”“Excel對象模型”。(譯者:2002版有全局的對象模型,2003版好像沒有這個。)除了Excel對象,你還可以使用Office,F(xiàn)orms和DAO,ADO對象模型。屬于這些數(shù)據(jù)庫(library)中的對象都可以用在Excel中,也可以用在Office家族中的
24、其它應(yīng)用軟件中。在十五章,你可以看到使用DAO和ADO對象,從Excel進入Access數(shù)據(jù)庫的例子。 圖26 Excel對象(Worksheet) 技巧24 VBA 和 Excel 的早期版本Excel在線幫助列出了Excel對象模型從早期版本以來的變化。許多對象,屬性和方法都已經(jīng)被更新的,改進的特色所代替了。為了提供兼容性,被取代的對象已經(jīng)被隱藏起來了(譯者:它們?nèi)匀皇强捎玫模4蜷_VB編輯器窗口上的在線幫助,隱藏的對象同樣可以在對象瀏覽器里找到。如果你在對象瀏覽器窗口上單擊右鍵,你可以選擇顯示隱藏成員的選項。你將在以后的章節(jié)中學(xué)習(xí)如何使用對象瀏覽器。 句法和文法既然現(xiàn)在你已經(jīng)知道了VBA
25、的一些基本組成要素(對象,屬性和方法),是時間開始使用它們了。但是,你怎么將對象,屬性和方法連接成正確的語言結(jié)構(gòu)呢?每種語言都有語法規(guī)則,人們必須遵循語法以確保他們被理解了。無論你說的是英語,西班牙語,法語還是其它語言,你在讀,寫的時候都必須遵從一定的規(guī)則。在編程中,我們使用“句法”(syntax)這個術(shù)語來更確切地明確它的語言規(guī)則。你可以在在線幫助或者在對象瀏覽器窗口查找每個對象,屬性或方法的句法。下面列出一些你必須的VB常用規(guī)則:n 規(guī)則1:引用對象的屬性如果這個屬性沒有自變量,使用下面的句法:Object.Property對象是一個占位符,是你放置你想要進入的實際對象名稱的地方。屬性同樣
26、也是一個占位符,你可以在這里放置該對象的特點。例如:指向工作表中單元格A4中輸入的值,見下述指令:Range("A4").Value注意對象名稱和屬性之間的句號。當(dāng)你需要進入一個存在于多個其它對象里的對象的屬性時,你必須按順序地寫上所有對象的名稱,并且用 句號運算符分開。例如:ActiveSheet.Shapes(2).Line.Weight這個例子指向當(dāng)前工作表里圖形(Shapes)集合里的第二個對象里的直線(Line)對象的粗細(Weight)屬性。有些屬性要求一個或多個自變量。例如,使用偏移(Offset)屬性,你可以選擇一個和當(dāng)前單元格相對位置的單元格。Offset
27、屬性需要兩個自變量,第一個自變量為行號(rowOffset)第二個是列號(columnOffset)。 對象 屬性 自變量ActiveCell.Offset(3, 2)在上面的例子中,假設(shè)當(dāng)前單元格是A1,Offset(3, 2)將會指向往下3行和往右兩列的單元格,也就是單元格C4。因為,在括號內(nèi)的自變量總是很難理解,通常操作是將它們的名稱也列上,見下例:ActiveCell.Offset(rowOffset:=3, columnOffset:=2)注意,自變量名稱后面總是跟著一個冒號和一個等于號(:=)。如果你使用帶名稱的自變量,你可以任意順序地列出它們,上面的指令也可以寫成這樣:Activ
28、eCell.Offset(columnOffset:=2, rowOffset:=3)改后的指令沒有改變意思,你仍然指向單元格C4。然而,如果你改變ActiveCell.Offset(3, 2)中自變量的次序,結(jié)果你會指向D3,而不是C4。n 規(guī)則2:改變對象的屬性O(shè)bject.Property = ValueValue是一個新的你要賦給該對象屬性的值。這個值可以是:² 一個數(shù)字Range("A4").Value = 25上面的指令在當(dāng)前工作表的單元格A4里輸入數(shù)字25² 在引號里的文本ActiveCell.Font.Name = "Times
29、 New Roman"上面的指令將當(dāng)前單元格字體改為Times New Roman² 邏輯值(True或False)ActiveCell.Font.Bold = True上面的指令設(shè)置當(dāng)前單元格的字體為粗體。n 規(guī)則3:返回對象屬性的當(dāng)前值Variable = Object.PropertyVariable(變量)是VB將要儲存屬性設(shè)置的地方的名稱,你將在第三章里學(xué)習(xí)關(guān)于變量的知識。 變量 對象 屬性CellValue = Range(“A4”).Value上面的指令將當(dāng)前A4單元格里的值保存到變量CellValue。n 規(guī)則4:指向?qū)ο蟮姆椒ㄈ绻摲椒]有自變量,那么句法
30、應(yīng)該是:Object.Method對象是一個占位符,是你放置你想要進入的實際對象名稱的地方。方法同樣也是一個占位符,你可以在這里放置要對該對象的進行的操作的名稱。例如,可以使用下述指令來清除單元格A4的格式(譯者:應(yīng)該是內(nèi)容):對象 方法Range("A4").ClearContents如果該方法可以使用自變量來限制,那么句法為:Object.Method (argument1, argument2, argumentN)例如,使用GoTo方法,你可以快速地選擇工作表里的任何區(qū)域。GoTo方法的句法為:Object.GoTo(Reference, Scroll)對象.GoT
31、o(參照, 窗口滾動)Reference自變量是目標單元格或者區(qū)域,Scroll自變量可以設(shè)定為真(True)讓Excel窗口滾動到該目標地址出現(xiàn)在窗口的左上角;或者設(shè)定為假(False),窗口不滾動(譯者:系統(tǒng)默認為False)。例如,下面的VBA語句選擇工作表Sheet1里的單元格P100,并且窗口滾動:Application.GoTo _ Reference:=Worksheets("Sheet1").Range("P100"), _ Scroll:=True上面的指令沒有固定在一行,使用了一條特殊的線(下劃線)將它分為幾段。下面的部分將講述這個。
32、打斷很長的VBA語句盡管一行VBA代碼最多可以包含1024個字母,但是,為了使你個過程容易閱讀,最好將長的語句打斷為兩行甚至多行。VB使用一個專門的連續(xù)線(下劃線)置于一行代碼的末尾,表明下一行是這行的連續(xù)。例如:Selection.PasteSpecial _ Paste:=xlValues, _ Operation:=xlMultiply, _ SkipBlanks: =False, _ Transpose:=False這個連續(xù)符是下劃線,你必須在下劃線之后帶一個空格。你可以在下述幾種情況中使用連續(xù)符:n 運算符之前或者之后。例如:&,+,Like,NOT,ANDn 逗號之前或者之
33、后n 冒號和等號(:=)之前或者之后n 等號之前或者之后你不可以在冒號和等于號之間使用連續(xù)符,例如,下面的代碼VB是不認的:Selection.PasteSpecial Paste: _ =xlValues, Operation: _ =xlMultiply, SkipBlanks: _ =False, Transpose: _ =False Selection.PasteSpecial Paste: _ =xlValues, Operation: _ =xlMultiply, SkipBlanks: _ =False, Transpose: _ =False同樣,在引號之內(nèi)的文本之間加連續(xù)符
34、也是不對的,例如,下面的下劃線的使用是無效的: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錯誤在編寫或編輯VBA過程之中,無論你多名小心,出錯的可能性還是很打的。例如,你可以錯誤拼寫一語句,放錯了一個逗
35、號或引號,或者忘記了一個句號或右括號。這些類型的錯誤稱為句法錯誤。幸運的是,VB比較容易幫助你發(fā)現(xiàn)這種類型的錯誤。為了讓VB在你輸入一行代碼后,自動幫你檢測語法的正確性,你需要在VB窗口的“工具”“選項”里,確保勾選了“編輯器”頁上的“自動語法檢測”。圖27 選項對話框的編輯器上的“自動語法檢測”幫你檢查VBA過程里的打字錯誤當(dāng)VB發(fā)現(xiàn)語法錯誤時,彈出一個錯誤信息框,并且將有誤的代碼行顏色變?yōu)榧t色(參見圖28)或者其它在選項對話框“編輯器格式”頁設(shè)定的顏色。如果錯誤信息框上的解釋不夠清楚,你總是可以點擊“幫助”按鈕尋求更多的幫助。再如果VB在線幫助無法給你提供正確的方向,那么返回你的程序,仔細
36、檢查有誤的那行代碼是否漏掉了字母,引號,句號,冒號,等于號,左括號和右括號等。圖28 這個錯誤由于漏掉了常數(shù)xlCellType前面的括號而產(chǎn)生圖29 當(dāng)VB試圖在工作表或單元格區(qū)域里選擇一個并不存在的單元格時,就會產(chǎn)生一個運行時間錯誤查找語法錯誤可能是煩人的并且費時的事情。有些語法錯誤只有在過程運行的時候才能被發(fā)現(xiàn)。在試圖運行你的過程的時候,VB可能找到那種因為使用了無效的自變量,或者是漏掉了那些需要成對使用的指令如If語句和循環(huán)結(jié)構(gòu),而造成的錯誤。技巧25:程序調(diào)試你很可能不只一次聽過“計算機程序里充滿了錯誤”。在編程里,錯誤就被稱為“bug”(錯誤,漏洞),而“調(diào)試”(debug)則是給
37、你的程序除錯的過程。調(diào)試的第一步就是改正所有的語法錯誤。VB提供了無數(shù)種工具,你可以使用它們來追蹤和消除錯誤。在本章中,你將知道如何使用VB助手幫助你在編寫程序時出現(xiàn)盡可能少的錯誤;在第十三章中,你將學(xué)習(xí)如何使用專門的調(diào)試工具來捕獲你VBA程序里的錯誤。除了語法錯誤外,還有其它兩種錯誤:運行時間和邏輯。運行時間錯誤發(fā)生在過程運行的時候。圖29顯示了一種典型的運行時間錯誤。運行時間錯誤經(jīng)常發(fā)生在那些程序員在編寫代碼的時候沒有想到的情況。例如,當(dāng)程序試圖訪問一個用戶電腦上并不存在的驅(qū)動器或者文件,或者沒有首先檢查是否用戶插入軟盤并關(guān)閉軟驅(qū)口而試圖復(fù)制一個文件到軟盤,這時就會發(fā)生運行時間錯誤。第三種
38、錯誤邏輯錯誤,通常不會發(fā)出明確的錯誤信息。過程可能沒有語法錯誤,甚至運行無誤,然而,得到的卻是錯誤的結(jié)果。邏輯錯誤通常非常難以查找,并且它藏得很隱秘,間歇發(fā)生,你不能指望花幾個小時,甚至幾天,就能找到錯誤源。查找?guī)椭?dāng)你使用宏錄制器時,你所有的操作都被翻譯成VBA指令,并且放置在一個模塊里。你在研究這些錄制的過程時,不要忘記幫助隨時可用。你會發(fā)現(xiàn)有些代碼的意思可能會非常易懂,然而,有效卻不怎么明白。這時候,你就需要尋求幫助了。當(dāng)你獨自工作時,只要輕輕一點或者輕輕一按就可以請教你的VBA老師了。使用VB在線幫助比使用詞典或參考手冊要快捷和容易得多。如果你討厭一頁一頁地在詞典里找你需要的術(shù)語,你將
39、驚訝于你如何快地從VB代碼窗口找到需要的幫助頁面。讓我們來檢查你如何通過內(nèi)置的VBA老師的幫助,將WhatsInACell過程里的第一句變成你自己的VBA詞匯:Selection.SpecialCells(xlCellTypeConstants, 2).Select上面的指令可以打斷為三部分,哪些部分?Selection是對象還是屬性?SpecialCells是什么?Select是什么?要回答這些問題,請依照下面的操作:1. 激活你要分析的過程的代碼窗口2. 點擊你不懂的詞語3. 按下F1圖210 VBA的對象,屬性和方法在在線幫助里解釋得很詳細幫助就會顯示相應(yīng)的頁面。如果你的光標放在詞語“S
40、election”中間,你就會知道Selection可以是一個應(yīng)用程序的屬性,也可以是一個窗口對象。如果你的光標在下一個不明白的術(shù)語(SpecialCells)并且按上面的步驟再做一遍后,你將看到SpecialCells幫助屏幕(參見圖210)。注意,每個幫助主題包含許多信息。被查找的指令類型顯示在幫助窗口的上面;指令的類型允許詞語分類。例如,SpecialCells是方法,可以使用這個方法的對象名稱列在“應(yīng)用于”下面(譯者:點擊“應(yīng)用于”,出現(xiàn)對象名稱列表)。指令名稱下面的“參閱”和“示例”讓你快速地跳到其它應(yīng)用或意義相似的指令,以及查看使用這個指令的例子。指令的意義顯示在“參閱”和“示例”
41、標題的下面。接下來則是語法和需要的自變量和其它參數(shù)。“說明”部分給出一些推薦使用該指令的情形。你可以很容易地將示例中的代碼復(fù)制到你的過程中去:選中你要復(fù)制的代碼行,按下Ctrl+C,或者單擊右鍵,選擇快捷菜單上的“復(fù)制”,然后切換到VB代碼窗口,點擊你需要粘貼代碼的地方,再按下Ctrl+V或者選擇“編輯”“粘貼”。語法和編程快捷助手VB編輯器窗口上的“編輯”工具條上有很多按鈕,幫助你快速容易地輸入正確格式的VBA指令。如果“編輯”工具條目前在VB編輯器窗口上不可連接,那么你可以選擇“視圖”“工具條”圖211 編輯工具條上的按鈕使得編寫程序和設(shè)置指令格式變得很容易 在VB中編寫過程需要你使用成百
42、上千的內(nèi)置指令和函數(shù)。因為大多數(shù)人們無法學(xué)習(xí)所有VBA里可用指令的語法,IntelliSense提供了你所需求的語法和編程幫助。當(dāng)你在代碼窗口編程時,經(jīng)常會有專門的窗口彈出來,引導(dǎo)你完成正確的VBA代碼。屬性/方法列表每個對象都會有許多屬性和方法。當(dāng)你輸入一個對象名稱和一個句號以分開這個對象名稱和它的屬性或方法時,彈出一個列表菜單。這個菜單列出了在這個句號之前的對象的所有可用的屬性和方法(參見圖212)。如何打開這個自動工具?選擇“工具”“選項”,單擊選項對話框上的“編輯器”頁,確保勾選上“自動列出成員”。圖212 在輸入VBA指令時,VB會建議可以用于該對象的屬性和方法如何從彈出菜單(圖21
43、2)上選擇項目?試圖輸入你需要的屬性或方法名稱的前幾個字母,當(dāng)Excel突出顯示了正確的項目名稱,則回車,插入該項目到你的代碼中去,并且開始新的一行;或者,你需要在同一行繼續(xù)寫代碼,那么就按Tab鍵代替回車。你也可以雙擊該項目來插入到代碼中去。只要按Esc鍵就可以關(guān)閉這個彈出菜單,而不插入任何項目。當(dāng)你按Esc鍵取消了彈出菜單后,VB將不會對同樣的對象顯示該菜單。你可以通過以下方法來再次顯示屬性/方法彈出菜單:n 按Ctrl+Jn 使用“backspace”(后退)鍵刪除句號,然后重新輸入句號n 在代碼窗口上單擊右鍵(該對象,句號后),并且在快捷菜單上選擇“屬性/方法列表”n 選擇“編輯”“屬
44、性/方法列表”n 點擊“編輯器”工具條上的“屬性/方法列表”按鈕常數(shù)列表本章的前面,你學(xué)習(xí)了給屬性賦值,需要使用下面規(guī)則:Object.Property = Value如果選項對話框(編輯器頁)已經(jīng)勾選了“自動列出成員”,Excel就會在等號前的屬性彈出一個菜單,列出該對屬性有效的常數(shù)。常數(shù)是表明確切的描述或者結(jié)果的值。Excel和Office里面的其它應(yīng)用軟件都有很多預(yù)先定義的內(nèi)置常數(shù)。你將在第三章中學(xué)習(xí)常數(shù),常數(shù)類型和使用。假設(shè)你需要你的程序打開Excel工作表上的分頁預(yù)覽。“編輯”(譯者:視圖)菜單上有兩個選擇:普通視圖和分頁預(yù)覽。普通視圖是絕大多數(shù)Excel任務(wù)的默認視圖模式;分頁預(yù)覽
45、則是編輯視圖,顯示工作表中有內(nèi)容的區(qū)域。這兩種選項都有相應(yīng)的內(nèi)置常數(shù)來表示。Excel常數(shù)起名總是以“xl”開頭。你一旦在代碼窗口里輸入指令:ActiveWindow.View =就會彈出一個菜單,列出這個屬性的有效常數(shù)名稱。使用在上節(jié)中“屬性/方法列表”彈出菜單同樣的技術(shù),也可以處理“常數(shù)列表”彈出菜單。按下Ctrl+Shift+J或者點擊“編輯器”工具條上的“常數(shù)列表”按鈕,可以激活常數(shù)列表菜單。圖213 常數(shù)列表彈出菜單顯示了對敲入的屬性有效的常數(shù)清單參數(shù)信息如果你有過使用Excel函數(shù)的經(jīng)歷,你就會知道許多函數(shù)需要一個或者多個自變量(或者參數(shù))。如果VB函數(shù)要求自變量,你可以在輸入左括
46、號后在光標下面看到一個提示框,顯示必要的或可選的自變量的名稱(參見圖214)。參數(shù)信息幫你很容易地給VBA函數(shù)設(shè)置參數(shù)。另外,它提醒你其它兩件對函數(shù)運行正確至關(guān)重要的事情:自變量的順序和自變量要求的數(shù)據(jù)類型。你將在下一章里學(xué)習(xí)數(shù)據(jù)類型。在代碼窗口里面輸入下述代碼,看看參數(shù)信息是如何工作的:ActiveWorkbook.SaveAs(圖214 A tip window displays a list of arguments utilized by a VBA function or instruction.你一旦輸入了開始的括號,光標的下面就會出現(xiàn)一個提示框,當(dāng)前的自變量會顯示為粗體;當(dāng)你輸入
47、完第一個自變量并且輸入了逗號,VB會將下一個自變量為粗體。可選的自變量會用中括號 括起來。只要按下Esc鍵就可以關(guān)閉參數(shù)信息窗口。如何使用鍵盤來打開提示窗口?輸入指令或函數(shù),緊接著是左括號,然后按下Ctrl+Shift+I。你也可以點擊編輯菜單上的參數(shù)信息按鈕或者選擇“編輯”“參數(shù)信息”。快速信息當(dāng)你選擇了代碼窗口里的指令,函數(shù),方法,過程名稱或者常數(shù),然后點擊編輯工具條上的“快速信息”按鈕(或者按下Ctrl+I),VB將會顯示突出顯示項目的語法和常數(shù)的值??焖傩畔⒖梢酝ㄟ^選項對話框來打開或者關(guān)閉。在編輯器頁,勾選“自動顯示快速信息”,打開快速信息功能。圖215 快速信息提供函數(shù)參數(shù)清單,也可
48、以是常數(shù)值和VBA語句語法自動完成關(guān)鍵字加速在代碼窗口編寫VBA程序的另一種方法是使用“自動完成關(guān)鍵字”功能。當(dāng)你輸入一個關(guān)鍵字的前幾個字母,然后按下Ctrl+空格鍵,或者點擊編輯工具條上的“自動完成關(guān)鍵字”按鈕,VB會幫你輸入這個關(guān)鍵字的剩余字母,節(jié)約你的時間。例如,在代碼窗口里輸入關(guān)鍵字“Application”的前四個字母,并且按下Ctrl+空格鍵:ApplVB將會完成剩余的字母,在Appl地方,你將看到整個關(guān)鍵字Application。如果有好幾個關(guān)鍵字具有相同的開頭字母,當(dāng)你按下Ctrl+空格鍵后,VB會顯示一個彈出菜單,列出所有關(guān)鍵字。測試這個例子,可以輸入關(guān)鍵字Applicati
49、on的前三個字母,按工具條上的自動完成關(guān)鍵字按鈕,然后在彈出菜單上選取合適的關(guān)鍵字??s進/凸出也許你已經(jīng)看到,在選項對話框的編輯器頁上有許多設(shè)置你可以打開以使用代碼窗口許多可用的自動功能。如果勾選了“自動縮進”選項,你就可以自動縮進所選的代碼行,縮進的量為“Tab寬度”文本框里的數(shù)字。默認的自動縮進量是4個字母,你也可以在文本框里輸入一個新的數(shù)字來改變Tab寬度。你為什么需要在代碼里使用縮進?縮進可以使你的代碼更容易閱讀和理解。特別是輸入一些做決定或重復(fù)性工作的代碼行時,更建議使用縮進。你將在第五和第六章中學(xué)習(xí)如何創(chuàng)建這種類型的VB指令?,F(xiàn)在,我們來練習(xí)使用縮進和凸出代碼行,用第一章里的宏Wh
50、atsInACell作為例子:1. 在工程瀏覽器窗口,選擇FirstSteps(Chap01.xls)工程,并且激活含有WhatsInACell代碼的WorksheetFormatting模塊2. 選擇開始為關(guān)鍵字With和結(jié)束為End With的一段代碼3. 點擊編輯工具條上的縮進按鈕,或者按鍵盤上的Tab鍵(譯者:按Tab鍵需要將光標放在行首,而非選中指令)4. 選中的指令會向右移動4個字母的位置,如果使用了Tab寬度的默認設(shè)置。5. 點擊編輯工具條上的“凸出”按鈕,或者按Shift+Tab將選中的指令行返回原來的位置??s進和凸出同樣可以在編輯菜單里找到。設(shè)置注釋塊/解除注釋塊在第一章中,
51、你學(xué)習(xí)了一行代碼前面加一個引號表示注釋。注釋不但使代碼更容易理解,而且它在VBA過程的測試和處理問題中都是很有用的。例如,你執(zhí)行一個過程時,它可能和期望的運行不一致,對于那些可能產(chǎn)生問題的代碼行,你現(xiàn)在想略過它們,但是以后可能還需要用到它們,你就可以在它們前面加一個引號注釋掉它們,而不必刪除它們。對大多數(shù)人來說,需要注釋掉一行代碼的話,只有在它前面敲入一個引號就可以了,但是,如果要注釋掉整塊代碼,使用“編輯”工具條上的“設(shè)置注釋塊”和“解除注釋塊”按鈕則是很方便的。要注釋掉幾行代碼,只要選中這些代碼行并且點擊“設(shè)置注釋塊”按鈕。點擊“解除注釋塊”按鈕,將注釋掉的代碼恢復(fù)到代碼里。如果你沒有選中
52、文本,就點擊了“設(shè)置注釋塊”按鈕,只有在光標所在的代碼行前面加入引號。 使用對象瀏覽器如果你想要在VBA眾多的組件和功能中自由切換,那么使用對象瀏覽器。這個專門的內(nèi)置工具在VB編輯器窗口是可用的。使用下面任何一種方法都可以訪問對象瀏覽器:圖216 對象瀏覽器讓你在當(dāng)前VBA工程里可用的所有對象,屬性和方法里瀏覽n 按F2n 選擇“視圖”“對象瀏覽器”n 點擊工具條上的“對象瀏覽器”按鈕對象瀏覽器讓你瀏覽VBA過程中可用的對象,也可以查看它們的屬性,方法和事件。在對象瀏覽器的幫助下,你可以在VBA工程的多個過程之間快速移動。對象瀏覽器分為三部分(參見圖216)。窗口的上部顯示“工程/庫”下拉列表
53、,這里列出了所有庫名稱以及當(dāng)前VBA工程里可用的所有工程名稱。庫是包含一個應(yīng)用程序里對象的信息的專門文件。新的庫可以通過“引用”對話框(“工具”“引用”)來添加。<所有庫>列出了你電腦上安裝了的所有庫中的所有對象。當(dāng)你選擇一個叫“Excel”的庫時,僅僅能在Excel里執(zhí)行的對象名稱才能被看到。和Excel庫相反,VBA庫列出了所有能在VBA里執(zhí)行的對象名稱。在“工程/庫”下拉列表框下面,有一個“搜索”文本框,讓你可以快速地在某個庫里搜索你的信息。這個地方會記住你最近搜索的四個項目。在對象瀏覽器的任何地方單擊右鍵,在快捷菜單上選擇“全字匹配”,你就可以只搜索匹配整個字的內(nèi)容。對象瀏
54、覽器上的“搜索結(jié)果”(參見圖216和217)顯示符合搜索條件的庫,類和成員。當(dāng)你輸入搜索文本并且單擊搜索按鈕,VB展開對象瀏覽器對話框以顯示搜索結(jié)果。你可以點擊“望遠鏡”按鈕右邊的“顯示/隱藏搜索結(jié)果”來顯示或者隱藏搜索結(jié)果。圖217 在對象瀏覽器里搜索答案類列表框顯示所選中的庫里面所有可用的對象類,如果你選擇VBA工程,列表顯示該工程里的對象。在圖216里,CommandBarComboBox 對象類被選中了。當(dāng)你選中一個類,右邊的列表(成員)顯示該類可用的屬性,方法和事件。圖216上顯示了類CommandBarComboBox的一些成員。成員默認地按字母順序列出。然而,你可以使用對象瀏覽器
55、快捷菜單上的“組成員”來組織這些成員列表(屬性,方法或事件)。如果你選擇“工程/庫”里面的VBA工程,成員列表框列出該工程里的所有過程。雙擊該過程名稱,就可以進入該過程并檢查其代碼。如果你選擇類“VBA”,你將看到VB內(nèi)置的函數(shù)和常數(shù)。如果你對所選的類或成員需要更多的信息,可以點擊對象瀏覽器窗口上面的問號按鈕。對象瀏覽器下面的窗口顯示所選成員的代碼格式。如果你點擊代碼格式里綠色的連接部分,你將跳到對象瀏覽器窗口的所選成員的類或庫。代碼格式里的代碼可以被復(fù)制到Windows剪切板并且粘貼到代碼窗口里去。如果對象瀏覽器和代碼窗口都是可見的,你只要選中代碼格式里的文本,直接拖曳到代碼窗口就行了。通過
56、對象瀏覽器窗口上的橫豎分割線,你可以輕易地改變各個窗口的大小。你已經(jīng)發(fā)現(xiàn)了對象瀏覽器,你也許在想你如何才能讓它幫助你進行VBA編程。假設(shè)你在工作表中央放置了一個文本框,你如何讓Excel將這個文本框移動到工作表的左上方?1. 打開一個新工作表2. 選擇“視圖”“工具欄”,然后點擊“繪圖”3. 點擊“繪圖”上的文本框,在工作表中央畫一個文本框,并且隨便輸入什么文字4. 選擇文本框之外的任意單元格5. 按下Alt+F11激活VB編輯器窗口,并且選擇工程瀏覽器窗口的Personal (Personal.xls)6. 選擇“插入”“模塊”,增加一個新的模塊7. 在屬性窗口,給該模塊重命名:Manipu
57、lations8. 選擇“視圖”“對象瀏覽器”,或按F29. 在“工程/庫”下拉列表框里選擇“Excel”類10. 在搜索框里輸入“textbox”并點擊搜索按鈕。確保你沒有在文字間敲入空格。圖218 Excel 在工作表上面的名稱框里顯示插入的對象名稱圖219 使用對象瀏覽器窗口,你可以找到合適的VBA指令來編寫你自己的過程顯示的結(jié)果表明對象Shapes掌管我們文本框操作(參見圖219)。從成員列表清單上看,你可以很快就知道AddTextbox方法就是用來在工作表里添加文本框的方法。代碼格式窗口顯示了使用該方法的正確語法。如果你選擇AddTextbox方法并且按F1,你將看到關(guān)于它的幫助窗口,有更詳細的關(guān)于如果使用該方法的信息(參見圖220)圖220 要獲取對象瀏覽器找到的任何項目詳細信息,只要選擇整個項目并且按F1就可以了當(dāng)你細看AddTextbox方法的自變量和它們在幫助窗口上的解釋時,你就可以很快地知道文本框在工作表中的位置是由Left和Top屬性來決定的。你需要做的只是返回代碼窗口,編寫指令來移動文本框到工作表的左上方。11. 關(guān)閉對象瀏覽器和幫助窗口(如果它們還是打開的)12. 雙擊Manipulations模塊,輸入過程MoveTextBox:Sub MoveTextBox() With ActiveSheet.Shapes("Text box 1&qu
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年北京京北職業(yè)技術(shù)學(xué)院高職單招高職單招英語2016-2024歷年頻考點試題含答案解析
- 2025年云南國防工業(yè)職業(yè)技術(shù)學(xué)院高職單招數(shù)學(xué)歷年(2016-2024)頻考點試題含答案解析
- 行業(yè)標準與競爭策略-洞察分析
- 語義角色標注與推理-洞察分析
- 虛擬現(xiàn)實技術(shù)在建筑設(shè)計中的應(yīng)用-第1篇-洞察分析
- 音樂與社會變遷-洞察分析
- 現(xiàn)代舞技術(shù)探索-洞察分析
- 藝術(shù)史虛擬現(xiàn)實技術(shù)的應(yīng)用-洞察分析
- 稀土金屬資源勘探技術(shù)-洞察分析
- 二零二五便利店節(jié)假日促銷活動合同3篇
- 我的家鄉(xiāng)瓊海
- (2025)專業(yè)技術(shù)人員繼續(xù)教育公需課題庫(附含答案)
- 《互聯(lián)網(wǎng)現(xiàn)狀和發(fā)展》課件
- 【MOOC】計算機組成原理-電子科技大學(xué) 中國大學(xué)慕課MOOC答案
- 2024年上海健康醫(yī)學(xué)院單招職業(yè)適應(yīng)性測試題庫及答案解析
- 2024年湖北省武漢市中考語文適應(yīng)性試卷
- 非新生兒破傷風(fēng)診療規(guī)范(2024年版)解讀
- 春節(jié)拜年的由來習(xí)俗來歷故事
- 通信電子線路(哈爾濱工程大學(xué))智慧樹知到課后章節(jié)答案2023年下哈爾濱工程大學(xué)
- 皮膚惡性黑色素瘤-疾病研究白皮書
- 從心理學(xué)看現(xiàn)代家庭教育課件
評論
0/150
提交評論