VBA文法基礎(上)

來源:互聯網
上載者:User
- - - - - - - - - - - - - - - - - -

VBA文法基礎(上)
- - - - - - - - - - - - - - - - - - 資料類型
“資料類型”是指如何將資料存放區在記憶體中。
(1)Boolean
表示邏輯資料,可以是True或False中的任一個值。佔用2位元組的儲存空間,取值範圍為True或False,預設值為False。
(2)Byte
只能表示正數。佔用1位元組的儲存空間,取值範圍為0-255,預設值為0。
(3)Currency
一種儲存貨幣值資料的特殊數字格式。佔用8位元組的儲存空間,取值範圍為-922337203685477.5808-922337203685477.5807,預設值為0。
(4)Date
一種用於表示日期或時間的專用格式。佔用8位元組的儲存空間,取值範圍為100年1月1日——9999年12月31日,預設值為00:00:00。(有關在VBA中使用日期和時間的詳細介紹請見後面的一系列文章。)
(5)Decimal
一種包含以10的冪為刻度的十進位數的變體子類型,只能通過CDec轉換函式建立,不是一種獨立的資料類型。佔用14位元組的儲存空間,取值範圍為±79228162514264337593543950335(不帶小數點)或±7.9228162514264337593543950335(帶28位小數點),預設值為0。
(Decimal資料類型是在Excel 2000中引入的,在以前的版本中不能使用這種資料類型。該資料類型非常特殊,因為不能實際聲明它,它是Variant的子類型,必須使用CDec函數將一個變數轉換為Decimal資料類型)
(6)Double
儲存雙精確度浮點數,佔用8位元組的儲存空間,取值範圍為負值:-1.79769313486232E308——4.94065645841247E-324,正值:1.79769313486232E308——4.94065645841247E-324,預設值為0。
(7)Integer
表示從-32768-32767之間的整數,其中一位表示符號,佔用2位元組的儲存空間,預設值為0。
(8)Long
表示儲存為4個位元組空間的帶符號的數,其中一位表示符號,取值範圍為-2147483648-2147483647,預設值為0。
(9)Object
包含對某個對象的引用(地址),佔用4位元組的儲存空間,可對任何對象引用,預設值為Nothing。
(10)Single
表示分數、帶小數位或指數的數值等單精確度數,佔用4位元組的儲存空間,取值範圍為負值:-3.402823E38——1.401298E-45,正值:1.401298E-45——3.402823E38,預設值為0。
(11)String
可聲明定長和變長的String資料類型。其中,定長的String資料類型佔用的儲存空間為字串的長度,取值範圍為1——65400個字元,預設值等於該字串長度的空格數。變長的String資料類型能動態地加長或縮短以儲存要求的字串數,佔用的儲存空間為10位元組加上字串的長度,取值範圍為0——20億個字元,預設值為零長字串(“”)。(有關String資料類型及處理和操作字串資料的VBA內建函數的詳細介紹請見後面的一系列文章。)
(12)Variant
Variant字串類型的儲存空間為22位元組加上字串的長度,其取值範圍與變長字串資料型別的取值範圍相同,預設值為Empty。
Variant數字型的儲存空間為16位元組,其取值範圍與Double資料類型的取值範圍相同,預設值為Empty。
(有關Variant資料類型的進一步介紹見後面的一系列文章。)
(13)使用者自訂類型
允許使用者建立一種特殊的資料類型,這種資料類型由VBA的內部資料類型、數組、對象或其他使用者定義型別組成,其儲存空間為各個組成部分的儲存空間的總和,取值範圍與各個組成部分的資料類型的取值範圍一致,預設值為各個組成部分的預設值。(有關使用者自訂類型的進一步介紹請見後面的一系列文章。)
各資料類型之間也可以相互轉換。(有關資料類型轉換的詳細介紹請見後面的一系列文章)
(有關數字資料類型(Byte、Integer、Long、Single、Double、Currency、Decimal、Variant)及相應的VBA內建函數的詳細介紹請見後面的一系列文章。)
- - - - - - - - - - - - - - - - - - 常量(數)
常量即在程式執行過程中不發生改變的值或字串。
使用Const語句聲明常量。如:
Const Rate=0.25
Const NumMonths As Integer=12
Public 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關鍵字還可以用於銷毀當前的對象引用。
(關於常量的介紹還可見 《ExcelVBA編程系列之資料類型(1):常量》)
- - - - - - - - - - - - - - - - - - 變數
變數的主要作用是存取資料、提供了資料存放資訊的容器。根據變數的範圍不同,可分為局部變數、全域變數,見後面的變數(常量)範圍和生存期介紹。
變數命名要注意以下幾點:
1、有效性。變數以字母開頭,中間可以出現數字和一些標點符號,除底線( _ )作為連字號外,變數名稱不能有空格、加號(+)、減號(-)、逗號(,)、句點(.)等符號。
2、VBA不區分大小寫。但在變數命名時,最好體現該變數的作用
3、不能使用VBA中的關鍵字作為變數。
4、變數名稱中不能有特殊類型的聲明字元(#、$、%、&或!)。
5、變數名稱最多可以包含254個字元。
(有關VBA的命名規則的詳細介紹請見後面的一系列文章)
- - - - - - - - - - - - - - - - - - 聲明變數
其文法為:
Dim < 變數名> As < 資料類型>
或:Private < 變數名> As < 資料類型>
或:Public < 變數名> As < 資料類型>
可以在一行中聲明多個變數,每個變數之間用逗號分隔開。
還有一種聲明變數的方法是,將一個字元加在變數名稱後面,從而聲明變數的資料類型。如
Dim MyVar%
表示將變數MyVar聲明為整型。一些型別宣告符為:
資料類型        類型宣告字元
Integer            %
Long               &
Single             !
Double           #
Currency       @
String             $
在模組前加入Option Explicit語句,將強制聲明所使用的所有變數。 - - - - - - - - - - - - - - - - - -
物件變數
在使用物件模型的屬性、方法和事件之前,必須建立一個對包含所需屬性、方法和事件的類的引用。可以先聲明一個局部物件變數以儲存該對象引用,然後把對象引用賦給該局部變數。
聲明物件變數的方法和聲明其他類型的變數基本上一樣。有三種聲明物件變數的方法:
(1) Dim myObject As < 庫名>.< 類名>
此方法指向類的類型庫,但沒有給該變數賦予任何類的執行個體。此時,變數myObject被賦值為Nothing。若要用這種方式引用類,就必須利用“引用”對話方塊向工程添加一個對類別模組的引用。若要將類的執行個體引用賦予該變數,必須在使用該變數之前用Set語句賦值。如:
Set myObject=< 庫名>.< 類名>
(2) Dim myObject As New < 庫名>.< 類名>
此方法將類的新執行個體引用賦給Object變數。同樣,要用這種方式引用類,必須先利用“引用”對話方塊向工程添加一個對類別模組的引用。
(3) Dim myObject As Object
此方法將myObject變數聲明為一般的Object資料類型,這在不能預Crowdsourced Security Testing道要建立的對象的資料類型時十分有用。此時,Object變數被賦值為Nothing。若要將對象引用賦值給該變數,必須使用CreateObject函數或GetObject函數。
可以用Private或Public語句替換Dim語句,且物件變數的範圍規則和其他類型的變數一樣。
聲明物件變數可以顯著地簡化代碼且加快代碼的執行速度。
有關物件模型的基礎知識見 ExcelVBA編程系列之物件模型(2):初步理解和使用Excel物件模型一文。 - - - - - - - - - - - - - - - - - -
集合(Collection)對象
集合對象是其他對象的一個容器。
一般有四個方法:
(1) Add方法
添加一項到集合中。除了可以指定資料外還可以指定索引值,通過索引值可以訪問集合中的成員。
(2) Count方法
返回集合中的項的個數。
(3) Item方法
通過集合中的索引(即集合中項的序號)或鍵(假設該項添加到集合時指定了)檢索集合中的成員。
(4) Remove方法
通過集合中的索引或鍵刪除集合中的成員。
可以使用With…End With構造和For Each … Next構造很方便地處理對象和集合,其介紹可參見 ExcelVBA編程系列之物件模型(2):初步理解和使用Excel物件模型一文。
- - - - - - - - - - - - - - - - - - 運算子
運算子是用於完成操作的一系列符號,包括算術運算子、比較子、邏輯運算子、字串運算子等。可用於串連一個或多個語言元素,或者完成一些運算以形成一個運算式。
- - - - - - - - - - - - - - - - - -
運算式
運算式就是變數、常量、運算子的集合,可分為算術運算式、字串運算式、賦值運算式、布林運算式等
詳細的內容請見 VBA編程系列:運算子和運算式
- - - - - - - - - - - - - - - - - - 數組
數組是一組擁有相同名稱同類元素。定義數組後,即建立了數組。數組中單個的資料項目稱為數組元素,用於訪問數組元素的編號稱為數組索引號,最小索引號和最大索引號稱為邊界。
在VBA中,根據數組元素是否變化,分為固定大小的數組和動態數組,根據數組的維數又可分為一維數組和多維陣列。
1、建立數組
用Dim語句來定義固定大小的數組,即聲明一個數組。如
Dim myArray(9) As Integer
上面的代碼建立一個名為myArray含有10個數組元素的一維數組。注意,所有VBA數組的下界均從0開始,因此上面的代碼所建立的數組元素從myArray(0)到myArray(9)。
在Dim語句中不指明數組元素的個數來聲明動態數組,如
Dim myDynamicArray() As Integer
使用ReDim關鍵字重新定義數組的大小:
ReDim myDynamicArray(10)
也可以用ReDim關鍵字同時聲明一個動態數組並指定該數組的元素個數:
ReDim myDynamicArray(5) As Integer
VBA沒有限制重新定義動態數組大小的次數,但在重新定義數組大小時,原有的數組資料就會丟失。如果需要保留原來的資料,可以使用Preserve關鍵字:
ReDim Preserve myDynamicArray(5)
需要注意的是,如果重新定義數組時減小了數組的大小,則會丟失被縮減了的那部分元素的資料。
當然,與聲明變數一樣,也可以用Public語句聲明公用數組。
2、確定數組的邊界
可以使用UBound函數和LBound函數分別擷取數組的最大邊界和最小邊界。
預設情況下,VBA的數組的下界是從0開始的,可以在模組的聲明部分使用Option Base語句來改變模組中數組的起始邊界。如
Option Base 1
該語句使數組元素的索引號從1開始。
也可以在定義數組時指定數組的上界和下界,如
Dim < 數組名> (< 下界> to < 上界>) As < 資料類型>
3、多維陣列
多維陣列可以在每個數組元素中儲存一組資料,因此,多維陣列的每個數組元素都包含一個數組。與一維數組相同,可以使用下面的兩種方法建立多維陣列:
(1)Dim < 數組名> (< 數組元素數1>,< 數組元素數2>,……) As < 資料類型>
(2)Dim < 數組名>(< 下界> to < 上界>,< 下界> to < 上界>,……) As < 資料類型>
與一維數組相似,多維陣列也可以是動態。
4、引用數組中的元素
可以使用數組名稱和一個索引號來引用數組中的某個特定的元素。
(有關數組的進一步介紹及其應用請見後面的一系列文章)
- - - - - - - - - - - - - - - - - - 內建函數
VBA中包含各種內建函數,可以簡化計算和操作。在VBA運算式中使用函數的方式與使用工作表公式中函數的方式相同。
在VBA代碼中,也可以使用很多Excel工作表函數,即使用WorksheetFunction對象調用工作表函數。但是不能使用具有與VBA內建函數功能相同的工作表函數。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.