VBA語(yǔ)法基礎(chǔ)(上) 轉(zhuǎn)自:http://hi.baidu.com/freehawk/blog/item/98f61f08d707d8d563d986e2.html
- - - - - - - - - - - - - - -- - - 數(shù)據(jù)類型 “數(shù)據(jù)類型”是指如何將數(shù)據(jù)存儲(chǔ)在內(nèi)存中。 (1)Boolean 表示邏輯數(shù)據(jù),可以是True或False中的任一個(gè)值。占用2字節(jié)的存儲(chǔ)空間,取值范圍為True或False,缺省值為False。 (2)Byte 只能表示正數(shù)。占用1字節(jié)的存儲(chǔ)空間,取值范圍為0-255,缺省值為0。 (3)Currency 一種保存貨幣值數(shù)據(jù)的特殊數(shù)字格式。占用8字節(jié)的存儲(chǔ)空間,取值范圍為-922337203685477.5808-922337203685477.5807,缺省值為0。 (4)Date 一種用于表示日期或時(shí)間的專用格式。占用8字節(jié)的存儲(chǔ)空間,取值范圍為100年1月1日——9999年12月31日,缺省值為00:00:00。 (5)Decimal 一種包含以10的冪為刻度的十進(jìn)制數(shù)的變體子類型,只能通過CDec轉(zhuǎn)換函數(shù)創(chuàng)建,不是一種獨(dú)立的數(shù)據(jù)類型。占用14字節(jié)的存儲(chǔ)空間,取值范圍為±79228162514264337593543950335(不帶小數(shù)點(diǎn))或±7.9228162514264337593543950335(帶28位小數(shù)點(diǎn)),缺省值為0。 (Decimal數(shù)據(jù)類型是在Excel2000中引入的,在以前的版本中不能使用這種數(shù)據(jù)類型。該數(shù)據(jù)類型非常特殊,因?yàn)椴荒軐?shí)際聲明它,它是Variant的子類型,必須使用CDec函數(shù)將一個(gè)變量轉(zhuǎn)換為Decimal數(shù)據(jù)類型) (6)Double 存儲(chǔ)雙精度浮點(diǎn)數(shù),占用8字節(jié)的存儲(chǔ)空間,取值范圍為負(fù)值:-1.79769313486232E308——4.94065645841247E-324,正值:1.79769313486232E308——4.94065645841247E-324,缺省值為0。 (7)Integer 表示從-32768-32767之間的整數(shù),其中一位表示符號(hào),占用2字節(jié)的存儲(chǔ)空間,缺省值為0。 (8)Long 表示存儲(chǔ)為4個(gè)字節(jié)空間的帶符號(hào)的數(shù),其中一位表示符號(hào),取值范圍為-2147483648-2147483647,缺省值為0。 (9)Object 包含對(duì)某個(gè)對(duì)象的引用(地址),占用4字節(jié)的存儲(chǔ)空間,可對(duì)任何對(duì)象引用,缺省值為Nothing。 (10)Single 表示分?jǐn)?shù)、帶小數(shù)位或指數(shù)的數(shù)值等單精度數(shù),占用4字節(jié)的存儲(chǔ)空間,取值范圍為負(fù)值:-3.402823E38——1.401298E-45,正值:1.401298E-45——3.402823E38,缺省值為0。 (11)String 可聲明定長(zhǎng)和變長(zhǎng)的String數(shù)據(jù)類型。其中,定長(zhǎng)的String數(shù)據(jù)類型占用的存儲(chǔ)空間為字符串的長(zhǎng)度,取值范圍為1——65400個(gè)字符,缺省值等于該字符串長(zhǎng)度的空格數(shù)。變長(zhǎng)的String數(shù)據(jù)類型能動(dòng)態(tài)地加長(zhǎng)或縮短以存儲(chǔ)要求的字符串?dāng)?shù),占用的存儲(chǔ)空間為10字節(jié)加上字符串的長(zhǎng)度,取值范圍為0——20億個(gè)字符,缺省值為零長(zhǎng)字符串(“”)。 (12)Variant Variant字符串類型的存儲(chǔ)空間為22字節(jié)加上字符串的長(zhǎng)度,其取值范圍與變長(zhǎng)字符串?dāng)?shù)據(jù)類型的取值范圍相同,缺省值為Empty。 Variant數(shù)字型的存儲(chǔ)空間為16字節(jié),其取值范圍與Double數(shù)據(jù)類型的取值范圍相同,缺省值為Empty。 (13)用戶自定義類型 允許用戶創(chuàng)建一種特殊的數(shù)據(jù)類型,這種數(shù)據(jù)類型由VBA的內(nèi)部數(shù)據(jù)類型、數(shù)組、對(duì)象或其他用戶定義類型組成,其存儲(chǔ)空間為各個(gè)組成部分的存儲(chǔ)空間的總和,取值范圍與各個(gè)組成部分的數(shù)據(jù)類型的取值范圍一致,缺省值為各個(gè)組成部分的缺省值。 各數(shù)據(jù)類型之間也可以相互轉(zhuǎn)換。 - - - - - - - - - - - - - - -- - - 常量(數(shù)) 常量即在程序執(zhí)行過程中不發(fā)生改變的值或字符串。 使用Const語(yǔ)句聲明常量。如: Const Rate=0.25 Const NumMonths As Integer=12 Public Const myName As String=”BabyPig” 而最后一個(gè)語(yǔ)句聲明了一個(gè)公共常量,應(yīng)放在模塊中所有過程之前聲明。 VBA自身包含有許多內(nèi)置常數(shù),它們的值都是VBA預(yù)先定義好的,使用內(nèi)部常數(shù)時(shí)無(wú)需定義這些常數(shù)的值。 ■ 幾個(gè)特殊的常數(shù) 由于有好幾種不相同的“無(wú)效值”常數(shù),VBA語(yǔ)言提供了好幾種方法,以檢驗(yàn)?zāi)硞€(gè)變量是否為empty或null值,或者設(shè)置某個(gè)變量為empty或null值。 (1) vbNull 和VarType函數(shù)一起使用,用于確定變量是否包含null。 (2) vbNullChar 賦值或檢測(cè)null字符,null字符的值為Chr(0),即vbNullChar常數(shù)相當(dāng)于將變量賦值為Chr(0),可用于檢測(cè)變量,確定它的值是否是一個(gè)null字符。 (3) vbNullString 賦值或檢測(cè)零長(zhǎng)(空)字符串。 (4) Null關(guān)鍵字 將null值賦給variant變量后,可以通過調(diào)用IsNull函數(shù)來檢測(cè)變量是否是Null值。 (5) vbEmpty 檢測(cè)某個(gè)variant變量是否初始化。 (6) Nothing關(guān)鍵字 只能和對(duì)象變量一起使用,以確定變量是否具有有效的對(duì)象引用,此外,Nothing關(guān)鍵字還可以用于銷毀當(dāng)前的對(duì)象引用。 - - - - - - - - - - - - - - -- - - 變量 變量的主要作用是存取數(shù)據(jù)、提供了數(shù)據(jù)存放信息的容器。根據(jù)變量的作用域不同,可分為局部變量、全局變量,見后面的變量(常量)作用域和生存期介紹。 變量命名要注意以下幾點(diǎn): 1、有效性。變量以字母開頭,中間可以出現(xiàn)數(shù)字和一些標(biāo)點(diǎn)符號(hào),除下劃線(_)作為連字符外,變量名稱不能有空格、加號(hào)(+)、減號(hào)(-)、逗號(hào)(,)、句點(diǎn)(.)等符號(hào)。 2、VBA不區(qū)分大小寫。但在變量命名時(shí),最好體現(xiàn)該變量的作用 3、不能使用VBA中的關(guān)鍵字作為變量。 4、變量名稱中不能有特殊類型的聲明字符(#、$、%、&或!)。 5、變量名稱最多可以包含254個(gè)字符。 - - - - - - - - - - - - - - -- - - 聲明變量 其語(yǔ)法為: Dim <變量名> As <數(shù)據(jù)類型> 或:Private <變量名> As<數(shù)據(jù)類型> 或:Public <變量名> As<數(shù)據(jù)類型> 可以在一行中聲明多個(gè)變量,每個(gè)變量之間用逗號(hào)分隔開。 還有一種聲明變量的方法是,將一個(gè)字符加在變量名稱后面,從而聲明變量的數(shù)據(jù)類型。如 Dim MyVar% 表示將變量MyVar聲明為整型。一些類型聲明符為: 數(shù)據(jù)類型 類型聲明字符 Integer % Long & Single ! Double # Currency @ String $ 在模塊前加入Option Explicit語(yǔ)句,將強(qiáng)制聲明所使用的所有變量。 - - - - - - - - - - - - -- - - - - 對(duì)象變量 在使用對(duì)象模型的屬性、方法和事件之前,必須創(chuàng)建一個(gè)對(duì)包含所需屬性、方法和事件的類的引用??梢韵嚷暶饕粋€(gè)局部對(duì)象變量以存儲(chǔ)該對(duì)象引用,然后把對(duì)象引用賦給該局部變量。 聲明對(duì)象變量的方法和聲明其他類型的變量基本上一樣。有三種聲明對(duì)象變量的方法: (1) Dim myObject As<庫(kù)名>.<類名> 此方法指向類的類型庫(kù),但沒有給該變量賦予任何類的實(shí)例。此時(shí),變量myObject被賦值為Nothing。若要用這種方式引用類,就必須利用“引用”對(duì)話框向工程添加一個(gè)對(duì)類模塊的引用。若要將類的實(shí)例引用賦予該變量,必須在使用該變量之前用Set語(yǔ)句賦值。如: Set myObject=<庫(kù)名>.<類名> (2) Dim myObject As New<庫(kù)名>.<類名> 此方法將類的新實(shí)例引用賦給Object變量。同樣,要用這種方式引用類,必須先利用“引用”對(duì)話框向工程添加一個(gè)對(duì)類模塊的引用。 (3) Dim myObject As Object 此方法將myObject變量聲明為一般的Object數(shù)據(jù)類型,這在不能預(yù)先知道要?jiǎng)?chuàng)建的對(duì)象的數(shù)據(jù)類型時(shí)十分有用。此時(shí),Object變量被賦值為Nothing。若要將對(duì)象引用賦值給該變量,必須使用CreateObject函數(shù)或GetObject函數(shù)。 可以用Private或Public語(yǔ)句替換Dim語(yǔ)句,且對(duì)象變量的作用域規(guī)則和其他類型的變量一樣。 聲明對(duì)象變量可以顯著地簡(jiǎn)化代碼且加快代碼的執(zhí)行速度。 有關(guān)對(duì)象模型的基礎(chǔ)知識(shí)見ExcelVBA編程系列之對(duì)象模型(2):初步理解和使用Excel對(duì)象模型一文。 - - - - - - - - - - - - -- - - - - 集合(Collection)對(duì)象 集合對(duì)象是其他對(duì)象的一個(gè)容器。 一般有四個(gè)方法: (1) Add方法 添加一項(xiàng)到集合中。除了可以指定數(shù)據(jù)外還可以指定鍵值,通過鍵值可以訪問集合中的成員。 (2) Count方法 返回集合中的項(xiàng)的個(gè)數(shù)。 (3) Item方法 通過集合中的索引(即集合中項(xiàng)的序號(hào))或鍵(假設(shè)該項(xiàng)添加到集合時(shí)指定了)檢索集合中的成員。 (4) Remove方法 通過集合中的索引或鍵刪除集合中的成員。 可以使用With…End With構(gòu)造和For Each …Next構(gòu)造很方便地處理對(duì)象和集合,其介紹可參見ExcelVBA編程系列之對(duì)象模型(2):初步理解和使用Excel對(duì)象模型一文。 - - - - - - - - - - - - - - -- - - 運(yùn)算符 運(yùn)算符是用于完成操作的一系列符號(hào),包括算術(shù)運(yùn)算符、比較運(yùn)算符、邏輯運(yùn)算符、字符串運(yùn)算符等??捎糜谶B接一個(gè)或多個(gè)語(yǔ)言元素,或者完成一些運(yùn)算以形成一個(gè)表達(dá)式。 - - - - - - - - - - - - - - -- - - 表達(dá)式 表達(dá)式就是變量、常量、運(yùn)算符的集合,可分為算術(shù)表達(dá)式、字符串表達(dá)式、賦值表達(dá)式、布爾表達(dá)式等 詳細(xì)的內(nèi)容請(qǐng)見VBA編程系列:運(yùn)算符和表達(dá)式。 - - - - - - - - - - - - - - -- - - 數(shù)組 數(shù)組是一組擁有相同名稱同類元素。定義數(shù)組后,即創(chuàng)建了數(shù)組。數(shù)組中單個(gè)的數(shù)據(jù)項(xiàng)稱為數(shù)組元素,用于訪問數(shù)組元素的編號(hào)稱為數(shù)組索引號(hào),最小索引號(hào)和最大索引號(hào)稱為邊界。 在VBA中,根據(jù)數(shù)組元素是否變化,分為固定大小的數(shù)組和動(dòng)態(tài)數(shù)組,根據(jù)數(shù)組的維數(shù)又可分為一維數(shù)組和多維數(shù)組。 1、創(chuàng)建數(shù)組 用Dim語(yǔ)句來定義固定大小的數(shù)組,即聲明一個(gè)數(shù)組。如 Dim myArray(9) As Integer 上面的代碼創(chuàng)建一個(gè)名為myArray含有10個(gè)數(shù)組元素的一維數(shù)組。注意,所有VBA數(shù)組的下界均從0開始,因此上面的代碼所創(chuàng)建的數(shù)組元素從myArray(0)到myArray(9)。 在Dim語(yǔ)句中不指明數(shù)組元素的個(gè)數(shù)來聲明動(dòng)態(tài)數(shù)組,如 Dim myDynamicArray() As Integer 使用ReDim關(guān)鍵字重新定義數(shù)組的大?。?br>ReDim myDynamicArray(10) 也可以用ReDim關(guān)鍵字同時(shí)聲明一個(gè)動(dòng)態(tài)數(shù)組并指定該數(shù)組的元素個(gè)數(shù): ReDim myDynamicArray(5) As Integer VBA沒有限制重新定義動(dòng)態(tài)數(shù)組大小的次數(shù),但在重新定義數(shù)組大小時(shí),原有的數(shù)組數(shù)據(jù)就會(huì)丟失。如果需要保留原來的數(shù)據(jù),可以使用Preserve關(guān)鍵字: ReDim Preserve myDynamicArray(5) 需要注意的是,如果重新定義數(shù)組時(shí)減小了數(shù)組的大小,則會(huì)丟失被縮減了的那部分元素的數(shù)據(jù)。 當(dāng)然,與聲明變量一樣,也可以用Public語(yǔ)句聲明公共數(shù)組。 2、確定數(shù)組的邊界 可以使用UBound函數(shù)和LBound函數(shù)分別獲取數(shù)組的最大邊界和最小邊界。 默認(rèn)情況下,VBA的數(shù)組的下界是從0開始的,可以在模塊的聲明部分使用OptionBase語(yǔ)句來改變模塊中數(shù)組的起始邊界。如 Option Base 1 該語(yǔ)句使數(shù)組元素的索引號(hào)從1開始。 也可以在定義數(shù)組時(shí)指定數(shù)組的上界和下界,如 Dim <數(shù)組名> (<下界> to<上界>) As <數(shù)據(jù)類型> 3、多維數(shù)組 多維數(shù)組可以在每個(gè)數(shù)組元素中存儲(chǔ)一組數(shù)據(jù),因此,多維數(shù)組的每個(gè)數(shù)組元素都包含一個(gè)數(shù)組。與一維數(shù)組相同,可以使用下面的兩種方法創(chuàng)建多維數(shù)組: (1)Dim <數(shù)組名>(<數(shù)組元素?cái)?shù)1>,<數(shù)組元素?cái)?shù)2>,……)As <數(shù)據(jù)類型> (2)Dim <數(shù)組名>(<下界> to<上界>,<下界> to<上界>,……) As <數(shù)據(jù)類型> 與一維數(shù)組相似,多維數(shù)組也可以是動(dòng)態(tài)的。 4、引用數(shù)組中的元素 可以使用數(shù)組名稱和一個(gè)索引號(hào)來引用數(shù)組中的某個(gè)特定的元素。 - - - - - - - - - - - - - - -- - - 內(nèi)置函數(shù) VBA中包含各種內(nèi)置函數(shù),可以簡(jiǎn)化計(jì)算和操作。在VBA表達(dá)式中使用函數(shù)的方式與使用工作表公式中函數(shù)的方式相同。 在VBA代碼中,也可以使用很多Excel工作表函數(shù),即使用WorksheetFunction對(duì)象調(diào)用工作表函數(shù)。但是不能使用具有與VBA內(nèi)置函數(shù)功能相同的工作表函數(shù)。 |
|