VBA語法.doc_第1頁
VBA語法.doc_第2頁
VBA語法.doc_第3頁
VBA語法.doc_第4頁
VBA語法.doc_第5頁
已閱讀5頁,還剩10頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

VBA語法技巧數據類型“數據類型”是指如何將數據存儲在內存中。(1)Boolean表示邏輯數據,可以是True或False中的任一個值。占用2字節(jié)的存儲空間,取值范圍為True或False,缺省值為False。(2)Byte只能表示正數。占用1字節(jié)的存儲空間,取值范圍為0-255,缺省值為0。(3)Currency一種保存貨幣值數據的特殊數字格式。占用8字節(jié)的存儲空間,取值范圍為-922337203685477.5808-922337203685477.5807,缺省值為0。(4)Date一種用于表示日期或時間的專用格式。占用8字節(jié)的存儲空間,取值范圍為100年1月1日9999年12月31日,缺省值為00:00:00。 (5)Decimal一種包含以10的冪為刻度的十進制數的變體子類型,只能通過CDec轉換函數創(chuàng)建,不是一種獨立的數據類型。占用14字節(jié)的存儲空間,取值范圍為79228162514264337593543950335(不帶小數點)或7.9228162514264337593543950335(帶28位小數點),缺省值為0。(Decimal數據類型是在Excel 2000中引入的,在以前的版本中不能使用這種數據類型。該數據類型非常特殊,因為不能實際聲明它,它是Variant的子類型,必須使用CDec函數將一個變量轉換為Decimal數據類型)(6)Double存儲雙精度浮點數,占用8字節(jié)的存儲空間,取值范圍為負值:-1.79769313486232E3084.94065645841247E-324,正值:1.79769313486232E3084.94065645841247E-324,缺省值為0。(7)Integer表示從-32768-32767之間的整數,其中一位表示符號,占用2字節(jié)的存儲空間,缺省值為0。(8)Long表示存儲為4個字節(jié)空間的帶符號的數,其中一位表示符號,取值范圍為-2147483648-2147483647,缺省值為0。(9)Object包含對某個對象的引用(地址),占用4字節(jié)的存儲空間,可對任何對象引用,缺省值為Nothing。(10)Single表示分數、帶小數位或指數的數值等單精度數,占用4字節(jié)的存儲空間,取值范圍為負值:-3.402823E381.401298E-45,正值:1.401298E-453.402823E38,缺省值為0。(11)String可聲明定長和變長的String數據類型。其中,定長的String數據類型占用的存儲空間為字符串的長度,取值范圍為165400個字符,缺省值等于該字符串長度的空格數。變長的String數據類型能動態(tài)地加長或縮短以存儲要求的字符串數,占用的存儲空間為10字節(jié)加上字符串的長度,取值范圍為020億個字符,缺省值為零長字符串(“”)。 (12)VariantVariant字符串類型的存儲空間為22字節(jié)加上字符串的長度,其取值范圍與變長字符串數據類型的取值范圍相同,缺省值為Empty。Variant數字型的存儲空間為16字節(jié),其取值范圍與Double數據類型的取值范圍相同,缺省值為Empty。(13)用戶自定義類型允許用戶創(chuàng)建一種特殊的數據類型,這種數據類型由VBA的內部數據類型、數組、對象或其他用戶定義類型組成,其存儲空間為各個組成部分的存儲空間的總和,取值范圍與各個組成部分的數據類型的取值范圍一致,缺省值為各個組成部分的缺省值。各數據類型之間也可以相互轉換。常量(數)常量即在程序執(zhí)行過程中不發(fā)生改變的值或字符串。使用Const語句聲明常量。如:Const Rate=0.25Const NumMonths As Integer=12Public Const myName As String=”BabyPig”而最后一個語句聲明了一個公共常量,應放在模塊中所有過程之前聲明。VBA自身包含有許多內置常數,它們的值都是VBA預先定義好的,使用內部常數時無需定義這些常數的值。 幾個特殊的常數由于有好幾種不相同的“無效值”常數,VBA語言提供了好幾種方法,以檢驗某個變量是否為empty或null值,或者設置某個變量為empty或null值。(1) vbNull和VarType函數一起使用,用于確定變量是否包含null。(2) vbNullChar賦值或檢測null字符,null字符的值為Chr(0),即vbNullChar常數相當于將變量賦值為Chr(0),可用于檢測變量,確定它的值是否是一個null字符。(3) vbNullString賦值或檢測零長(空)字符串。(4) Null關鍵字將null值賦給variant變量后,可以通過調用IsNull函數來檢測變量是否是Null值。(5) vbEmpty檢測某個variant變量是否初始化。(6) Nothing關鍵字只能和對象變量一起使用,以確定變量是否具有有效的對象引用,此外,Nothing關鍵字還可以用于銷毀當前的對象引用。變量變量的主要作用是存取數據、提供了數據存放信息的容器。根據變量的作用域不同,可分為局部變量、全局變量,見后面的變量(常量)作用域和生存期介紹。變量命名要注意以下幾點:1、有效性。變量以字母開頭,中間可以出現(xiàn)數字和一些標點符號,除下劃線( _ )作為連字符外,變量名稱不能有空格、加號(+)、減號(-)、逗號(,)、句點(.)等符號。2、VBA不區(qū)分大小寫。但在變量命名時,最好體現(xiàn)該變量的作用3、不能使用VBA中的關鍵字作為變量。4、變量名稱中不能有特殊類型的聲明字符(#、$、%、&或!)。5、變量名稱最多可以包含254個字符。聲明變量其語法為:Dim As 或:Private As 或:Public As 可以在一行中聲明多個變量,每個變量之間用逗號分隔開。還有一種聲明變量的方法是,將一個字符加在變量名稱后面,從而聲明變量的數據類型。如Dim MyVar%表示將變量MyVar聲明為整型。一些類型聲明符為:數據類型 類型聲明字符Integer %Long &Single !Double #Currency String $在模塊前加入Option Explicit語句,將強制聲明所使用的所有變量。對象變量在使用對象模型的屬性、方法和事件之前,必須創(chuàng)建一個對包含所需屬性、方法和事件的類的引用??梢韵嚷暶饕粋€局部對象變量以存儲該對象引用,然后把對象引用賦給該局部變量。聲明對象變量的方法和聲明其他類型的變量基本上一樣。有三種聲明對象變量的方法:(1) Dim myObject As .此方法指向類的類型庫,但沒有給該變量賦予任何類的實例。此時,變量myObject被賦值為Nothing。若要用這種方式引用類,就必須利用“引用”對話框向工程添加一個對類模塊的引用。若要將類的實例引用賦予該變量,必須在使用該變量之前用Set語句賦值。如:Set myObject=.(2) Dim myObject As New .此方法將類的新實例引用賦給Object變量。同樣,要用這種方式引用類,必須先利用“引用”對話框向工程添加一個對類模塊的引用。(3) Dim myObject As Object此方法將myObject變量聲明為一般的Object數據類型,這在不能預先知道要創(chuàng)建的對象的數據類型時十分有用。此時,Object變量被賦值為Nothing。若要將對象引用賦值給該變量,必須使用CreateObject函數或GetObject函數??梢杂肞rivate或Public語句替換Dim語句,且對象變量的作用域規(guī)則和其他類型的變量一樣。聲明對象變量可以顯著地簡化代碼且加快代碼的執(zhí)行速度。集合(Collection)對象集合對象是其他對象的一個容器。一般有四個方法:(1) Add方法添加一項到集合中。除了可以指定數據外還可以指定鍵值,通過鍵值可以訪問集合中的成員。(2) Count方法返回集合中的項的個數。(3) Item方法通過集合中的索引(即集合中項的序號)或鍵(假設該項添加到集合時指定了)檢索集合中的成員。(4) Remove方法通過集合中的索引或鍵刪除集合中的成員??梢允褂肳ithEnd With構造和For Each Next構造很方便地處理對象和集合,其介紹可參見ExcelVBA編程系列之對象模型(2):初步理解和使用Excel對象模型一文。運算符運算符是用于完成操作的一系列符號,包括算術運算符、比較運算符、邏輯運算符、字符串運算符等??捎糜谶B接一個或多個語言元素,或者完成一些運算以形成一個表達式。表達式表達式就是變量、常量、運算符的集合,可分為算術表達式、字符串表達式、賦值表達式、布爾表達式等數組數組是一組擁有相同名稱同類元素。定義數組后,即創(chuàng)建了數組。數組中單個的數據項稱為數組元素,用于訪問數組元素的編號稱為數組索引號,最小索引號和最大索引號稱為邊界。在VBA中,根據數組元素是否變化,分為固定大小的數組和動態(tài)數組,根據數組的維數又可分為一維數組和多維數組。1、創(chuàng)建數組用Dim語句來定義固定大小的數組,即聲明一個數組。如Dim myArray(9) As Integer上面的代碼創(chuàng)建一個名為myArray含有10個數組元素的一維數組。注意,所有VBA數組的下界均從0開始,因此上面的代碼所創(chuàng)建的數組元素從myArray(0)到myArray(9)。在Dim語句中不指明數組元素的個數來聲明動態(tài)數組,如Dim myDynamicArray() As Integer使用ReDim關鍵字重新定義數組的大?。篟eDim myDynamicArray(10)也可以用ReDim關鍵字同時聲明一個動態(tài)數組并指定該數組的元素個數:ReDim myDynamicArray(5) As IntegerVBA沒有限制重新定義動態(tài)數組大小的次數,但在重新定義數組大小時,原有的數組數據就會丟失。如果需要保留原來的數據,可以使用Preserve關鍵字:ReDim Preserve myDynamicArray(5)需要注意的是,如果重新定義數組時減小了數組的大小,則會丟失被縮減了的那部分元素的數據。當然,與聲明變量一樣,也可以用Public語句聲明公共數組。2、確定數組的邊界可以使用UBound函數和LBound函數分別獲取數組的最大邊界和最小邊界。默認情況下,VBA的數組的下界是從0開始的,可以在模塊的聲明部分使用Option Base語句來改變模塊中數組的起始邊界。如Option Base 1該語句使數組元素的索引號從1開始。也可以在定義數組時指定數組的上界和下界,如Dim ( to ) As 3、多維數組多維數組可以在每個數組元素中存儲一組數據,因此,多維數組的每個數組元素都包含一個數組。與一維數組相同,可以使用下面的兩種方法創(chuàng)建多維數組:(1)Dim (,) As (2)Dim ( to , to ,) As 與一維數組相似,多維數組也可以是動態(tài)的。4、引用數組中的元素可以使用數組名稱和一個索引號來引用數組中的某個特定的元素。內置函數VBA中包含各種內置函數,可以簡化計算和操作。在VBA表達式中使用函數的方式與使用工作表公式中函數的方式相同。在VBA代碼中,也可以使用很多Excel工作表函數,即使用WorksheetFunction對象調用工作表函數。但是不能使用具有與VBA內置函數功能相同的工作表函數?;菊Z句1、控制程序流程語句(1) GoTo語句該語句將執(zhí)行的程序轉到指定的標簽所在的語句指令,但不能轉移到過程之外的指令。例如,在進行錯誤捕捉時,發(fā)生錯誤后,程序轉移至標簽所在處執(zhí)行。(2) IfThen語句這種類型的語句用于條件判斷中,當滿足條件時,執(zhí)行相應的語句;當條件不滿足時,執(zhí)行其它的操作?;菊Z法為:If Then If Then語句有幾種形式分別用于不同的情況:當只有一個條件時,可使用下面的結構:If Then Else 其中,Else子句可選。如果該語句不在同一行中,則應在后面加上End If語句,即:If Then 指令End If或:If Then 指令Else 指令End If當條件為真時,執(zhí)行Then后面的語句并結束IfThen語句的執(zhí)行,否則執(zhí)行Else后面的語句或結束IfThen語句的執(zhí)行。當有兩個或多個條件時,可使用嵌套的If Then 結構:If Then 指令ElseIf Then 指令Else 指令End If上面只是兩層嵌套,可以根據情況使用多層嵌套。當條件為真時,執(zhí)行Then后面的語句并結束IfThen語句的執(zhí)行,否則判斷條件1,當條件1為真時,執(zhí)行Then后面的語句并結束IfThen語句的執(zhí)行,否則執(zhí)行Else后面的指令。(3) Select Case語句當需要作出三種或三種以上的條件判斷時,最后使用Select Case語句。其基本語法為:Select Case Case 條件表達式1 指令 Case 條件表達式2 指令 Case Else 指令End Select當某個條件表達式與測試表達式相匹配時,則執(zhí)行其后的指令,否則執(zhí)行Else(如果有的話)后的指令,然后結束Select Case塊的執(zhí)行。此外,Select Case語句還可以嵌套。2、循環(huán)語句循環(huán)即重復執(zhí)行某段代碼。在VBA中,有多種可以構成循環(huán)的語句結構。(1) For Next 循環(huán)其語法如下:For To step 步長 指令 Exit For 指令Next 計數器從開始到結束,反復執(zhí)行For和Next之間的指令塊,除非遇到Exit For語句,將提前跳出循環(huán)。其中,步長和Exit For語句以及Next后的計數器均為可選項。ForNext循環(huán)中可以再包含F(xiàn)orNext循環(huán),即ForNext循環(huán)可以嵌套使用。(2) Do While循環(huán)只有在滿足指定的條件時才執(zhí)行Do While循環(huán)。有兩種形式: 第一種形式Do While 條件 指令 Exit Do 指令Loop當條件滿足時執(zhí)行指令。 第二種形式Do 指令 Exit Do 指令Loop While 條件先執(zhí)行指令,然后再判斷條件,如果條件滿足則再次執(zhí)行指令。其中Exit Do語句表示提前退出指令塊。(3) Do Until循環(huán)與Do While循環(huán)一樣,也有兩種形式; 第一種形式Do Until 條件 指令 Exit Do 指令Loop 第二種形式Do 指令 Exit Do 指令Loop Until 條件執(zhí)行指令,直到條件滿足時退出循環(huán)。(4) While Wend循環(huán)其語法為:While 指令Wend當條件滿足時,則執(zhí)行指令。過程過程由一組完成所要求操作任務的VBA語句組成。子過程不返回值,因此,不能作為參數的組成部分。其語法為:Private|Public Static Sub (參數) 指令 Exit Sub 指令End Sub說明:(1) Private為可選。如果使用Private聲明過程,則該過程只能被同一個模塊中的其它過程訪問。(2) Public為可選。如果使用Public聲明過程,則表明該過程可以被工作簿中的所有其它過程訪問。但是如果用在包含Option Private Module語句的模塊中,則該過程只能用于所在工程中的其它過程。(3) Static為可選。如果使用Static聲明過程,則該過程中的所有變量為靜態(tài)變量,其值將保存。(4) Sub為必需。表示過程開始。(5) 為必需??梢允褂萌我庥行У倪^程名稱,其命名規(guī)則通常與變量的命名規(guī)則相同。(6) 參數為可選。代表一系列變量并用逗號分隔,這些變量接受傳遞到過程中的參數值。如果沒有參數,則為空括號。(7) Exit Sub為可選。表示在過程結束之前,提前退出過程。(8) End Sub為必需。表示過程結束。如果在類模塊中編寫子過程并把它聲明為Public,它將成為該類的方法。函數函數(function)是能完成特定任務的相關語句和表達式的集合。當函數執(zhí)行完畢時,它會向調用它的語句返回一個值。如果不顯示指定函數的返回值類型,就返回缺省的數據類型值。聲明函數的語法為:Private|Public Static Function (參數) As 類型 指令 函數名=表達式 Exit Function 指令 函數名=表達式End Function說明:(1) Private為可選。如果使用Private聲明函數,則該函數只能被同一個模塊中的其它過程訪問。(2) Public為可選。如果使用Public聲明函數,則表明該函數可以被所有Excel VBA工程中的所有其它過程訪問。不聲明函數過程的作用域時,默認的作用域為Public。(3) Static為可選。如果使用Static聲明函數,則在調用時,該函數過程中的所有變量均保持不變。(4) Function為必需。表示函數過程開始。(5) 為必需??梢允褂萌我庥行У暮瘮得Q,其命名規(guī)則與變量的命名規(guī)則相同。(6) 參數為可選。代表一系列變量并用逗號分隔,這些變量是傳遞給函數過程的參數值。參數必須用括號括起來。(7) 類型為可選。指定函數過程返回的數據類型。(8) Exit Function為可選。表示在函數過程結束之前,提前退出過程。(9) End Function為必需。表示函數過程結束。通常,在函數過程執(zhí)行結束前給函數名賦值。函數可以作為參數的組成部分。但是,函數只返回一個值,它不能執(zhí)行與對象有關的動作。如果在類模塊中編寫自定義函數并將該函數的作用域聲明為Public,這個函數將成為該類的方法。事件處理過程要對一個控件事件編寫事件處理程序,應先打開窗體的代碼窗口并從可用對象的下拉列表中選擇所需的控件。然后,從該控件的可用事件下拉列表中選擇所用的事件。此時,對事件處理程序的定義語句就會自動出現(xiàn)在代碼窗口中,就可以直接編寫事件處理程序了。在Excel中,有下面幾類事件,即Excel應用程序事件、工作簿事件、工作表事件、圖表事件、用戶窗體事件等。類模塊類模塊是存放共享變量以及共享代碼的存儲庫。創(chuàng)建一個類模塊,實際上也是在創(chuàng)建一個COM(組件對象模型)接口。因此,類模塊允許通過一個由屬性、方法和事件組成的可編程接口向外界描述應用程序,同時保證保留對應用程序的控制權。也就是說,類模塊能夠讓程序實現(xiàn)“封裝”,這樣,在其它工程中可以直接使用某類模塊而不需要訪問源代碼。此外,可以使用類來創(chuàng)建自已的庫,如果要使用的話,只需要在任何新的工程中添加一個對該類的引用就行了。并且,如果要改變程序,只需對類模塊改動就行了,而不需要在程序的每個部分都作改動。屬性過程屬性過程(property procedure)是特殊的過程,用于賦予和獲取自定義屬性的值。屬性過程只能在對象模塊如窗體或類模塊中使用。有三種屬性過程:Property Let 給屬性賦值Property Get 獲取屬性的值Property Set 將對象引用賦給屬性引用調用子過程和函數過程子過程可以用下面三種方法調用。第一種使用Call語句:Call DoSomething(參數1,參數2,)如果使用Call語句,就必須用小括號將參數列表括起來。第二種是直接利用過程名:DoSomething 參數1,參數2,此時,不用在參數列表兩邊加上括號。如果不想使用函數的返回值,可以用上述任一種方法調用函數。否則,可以用函數名作為表達式的組成部分,如If GetFunctionResult(parameter)=1 Then如果用函數調用作為表達式的一部分,參數列表必須放在小括號中。第三種是使用Run方法。在過程間傳遞參數在很多情況下,需要在子過程或函數中調用另一個自定義函數或子過程,這時,在被調用過程中就要用到在調用過程中使用的某個變量。因此,可把該變量作為參數傳遞給被調用過程。不管被調用過程是在同一模塊、同一工程中的過程,還是在遠程服務器上的類中的一個方法,從一個過程向另一個過程傳遞變量的原理都是一樣的。被調用過程(而不是調用過程)決定了變量如何從調用過程傳遞到被調用過程。1、VBA允許用兩種不同的方式在過程和組件之間傳遞參數。在子過程或函數的定義部分,可以指定參數列表中的變量的傳遞方式:ByRef(按引用)或者ByVal(按值)。(1) ByRef這是VBA中在過程間傳遞變量的默認方法。ByRef是指按引用傳遞變量,即傳遞給被調用過程的是原變量的引用。因此,如果改變了被調用過程中的變量值,其變化就會反映到調用過程中的那個變量,因為它們實際上是同一個變量。(2) ByVal如果使用ByVal關鍵字傳遞變量,被調用過程獲得的就是該變量的獨立副本。因此,改變被廟用過程中該變量的值不會影響調用過程中該變量原來的值。2、Optional參數Optional關鍵字用來指定某個特定的參數并不一定要傳遞,即為可選參數。但是,該參數必須放在最后。3、ParamArray使用ParamArray關鍵字能夠使過程按受一組數目可變的參數。ParamArray參數必須是參數列表中的最后一個參數,而且不能在使用了Optional關鍵字的參數列表中使用ParamArray參數。變量(常量)作用域和生存期有時需要在工程內的所有過程中使用某個變量,而有時某些變量又只需要在某些特定的過程中用到,變量的這種可見性稱為變

溫馨提示

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

評論

0/150

提交評論