Visual Basic for Applications（VBA）是 Visual Basic 的一種巨集語言，主要能用來擴展 Windows 的應用程式功能，特別是 Microsoft Office 軟體。也可說是一種應用程式視覺化的 Basic Script。 1994 年發行的 Excel 5.0 版本中，即具備了 VBA 的巨集功能。



數據類型

基本數據類型

即 Primary Type Data，下述列表的括號內為字節數：


* Byte (1)：無符號類型，取值範圍 0-255

* Boolean (2)

* Integer (2)

* Long (4)

* Single (4)

* Double (8)

* Currency (8)

* Decimal (14)

* Date (8)

* String

* Object (4)

* Variant （根據分配確定）

自定義的數據類型

相當於 C 語言的 struct，例如：

```
Type 自定义类型名
     元素名  As 类型
      …
     [元素名 As 类型]
End Type 
```

數組



常量

日期常量由符號「#」將字符括起來，如 #2012-1-1#。

系統定義常量有 3 個：True、False 和 Null。

固有常量是編程時引用的對象庫定義的常量。所有固有常量都可以在宏或 VBA 代碼中使用。通常，固有常量通過前兩個字母來指明定義該常量。來自 VB 庫的常量則以「vb」開頭。來自 Access 的常量以「ac」開頭。可以使用對象瀏覽器來查看所有對象庫中的固有常量列表。

可以自行定義常量。如：

```
Global Const 符号常量名称 = 常量值
```



調用 DLL

例如：

```
Private Declare Function getFrequency Lib "kernel32" _ Alias "QueryPerformanceFrequency" (cyFrequency As Currency) As Long
Private Declare Function getTickCount Lib "kernel32" _ Alias "QueryPerformanceCounter" (cyTickCount As Currency) As Long
```



控制結構

if 語句

```
if 條件1 then
   語句1
elseif 條件2 then
   語句2
elseif ...
    ...
else
   語句n
end if
```

Select Case 語句

```
Select Case 表達式
   Case 表達式列表1
       語句1
   Case 表達式列表2
       語句2
       ...
   Case 表達式列表n
       語句n
End Select 
```

其中的表達式列表可以為：


* 表達式 例： "A"

* 用逗號分隔的一組枚舉表達式 例：2,4,6,8

* 表達式 1 To 表達式 2 例：60 To 100

* Is 關係運算符表達式 例：Is < 60

Do...Loop 語句

```
Do While或Until 條件
   語句塊1
   Exit Do
   語句塊2
Loop
```

```
Do
   語句塊1
   Exit Do
   語句塊2
Loop While或Until 條件
```

For...Next 語句

```
For 循環控制變量=初值To 終值Step 步長
   語句塊 ‘Exit For語句可以跳出循環體
Next
```

For Each … Next 語句

```
For Each 循環控制變量 In 集合變量
   語句塊 
   Exit For語句可以跳出循環體
Next 循環控制變量
```

跳出本次循環的 continue 語句

VBA 沒有類似 C 語言的 continue 語句。通常可如此寫程序：

With 語句

```
With 對象引用
   語句塊
End With
```

On Error 語句

```
On Error Goto 出錯處理語句的label '跳轉到出錯處理語句
```

或

```
On Error Resume Next '遇到錯誤，不管錯誤，繼續往下執行
```

具有控制作用的函數


* IIf (條件式，表達式 1, 表達式 2)

* Switch (條件式 1, 表達式 1,[條件式 2, 表達式 2 [,..., 條件式 n, 表達式 n]])

* Choose (索引式，選項 1 [, 選項 2,...[, 選項 n]]) ' 這是基於 1 的索引



其他語句

註釋語句

使用 REM 或者單引號開始的行。

語句的連寫與續行

如果一行包括多條語句，用冒號分割各個語句。跨多行的語句，在行末用「空格加下劃線」表示續行。



過程與函數

```
Sub 過程名(參數表)
    語句塊
    Exit Sub
    語句塊
End Sub
```

 

```
Function 函數名(參數表) As Type
   語句塊
   函數名=表達式
   Exit Function
End Function
```

可以是 Private、Public、Friend、Static 等修飾。

調用函數 / 過程時，可以加括號或者不加括號。如果調用表達式作為一行的一部分，那麼必須用參數，例如函數調用的返回值賦給變量。 調用過程時， 可以使用 / 不使用 call 關鍵字。使用 call 語句調用過程，如果無參數，則不加括號；如果有參數，必須加括號。如果調用時用括號包住單個參數，則該參數強行按值傳遞。需要特別注意，不用 call 不加括號的調用，形參與實參是傳值 (passed by value) 而不是傳引用 (passed by reference)，這會導致一些對象的方法調用失敗。例如：



常用內置函數

VBA 的常用內置函數列表參見：[1] （頁面存檔備份，存於網際網路檔案館）


* MsgBox

* InputBox

* 捨入函數：Fix 向 0 取整，Int 向下取整，Round 四捨五入

* Rnd 返回 0-1 內的單精度隨機數

* 字符串函數：
  
* Filter：對字符串的一維數組的過濾
  
* InStr ([Start,]<Str1>,<Str2>[, Compare]) 與 InStrRev： 查找子串
  
* Len 字符串長度
  
* Join：連接一維數組中的所有子字符串
  
* Left,Right,Mid 截取子字符串
  
* Space (數值) 生成空格字符串
  
* Ucase,Lcase 大小寫轉換函數
  
* Ltrim, Rtrim,Trim 刪除首尾空格
  
* Replace
  
* Split：分割一個字符串成為一維數組
  
* StrComp：字符串比較
  
* StrConv：字符串轉換
  
* String (number, character)：制定字符重複若干次
  
* StrReverse

* 日期 / 時間有關函數：
  
* Year, Month, Day, WeekDay,Hour,Minute,Second 截取日期時間分量
  
* DateAdd 日期 / 時間增量函數
  
* DateDiff (<間隔類型>,<日期 1>,<日期 2>[,W1][,W2]) 日期 / 時間的距離函數
  
* DatePart (<分割類型>,<日期>[,w1][,w2]) 時間分割函數
  
* DateSerial (<表達式 1>,<表達式 2>,<表達式 3>) 合成日期；DateValue (「字符串表達式」) 返回日期；
  
* Date,Time,Now,Timer 返回日期時間
  
* DateValue
  
* TimeSerial：由時間序列得到時間對象
  
* TimeValue：由時間字符串得到時間對象
  
* Weekday：獲得日期的周幾
  
* WeekdayName

* 轉換函數：CBool、CByte、CCur、 CDate、 CDbl、CDec、CInt、 CLng、CLngLng、CLngPtr、CSng、CStr、CVar、CVErr、Asc (<字符串表達式>) 返回第一個字符的 Ascii 編碼值、Chr (ASCII 碼) 返回字符、Hex、Oct、Str (<數值表達式>) 返回字符串、Val (string)、Format、FormatCurrency、FormatDateTime、FormatNumber、FormatPercent、MonthName

* Nz (表達式或欄位屬性值 [, 規定值]) 如果是空，則返回 0 或者 "" 或者函數的第二個參數值

* 驗證函數：isNumeric、isDate、isNull、isEmpty IsArray、IsError、IsMissing、IsObject

* 數學函數：Abs、Sqr、Tan、Atn（即 atan）、Sin、Cos、Exp（e 為基的指數）、Log 自然對數

* Array: 構造一個 Array 對象

* CallByName: get or set a property, or invoke a method at run time using a string name.

* 控制流：Choose: 類似於 C 語言的 select 語句、IIf 相當於 IF-ELSE 語句、Switch

* Command：獲取命令行參數

* CreateObject：創建 ActiveX 對象

* CurDir：返回指定驅動器的當前工作路徑

* 由基本數學函數導出的函數：Sec、Cosec、Cotangent、Cotan、Arcsin、Arccos、Arcsec、Arccosec、Arccotan、HSin、HCos、HTan、HSec、HCosec、HCotan、HArcsin、HArccos、HArctan、HArcsec、HArccosec、HArccotan、LogN

* DoEvents：暫時把 CPU 控制權交回給系統。

* Environ：返迴環境變量的值

* 文件操作：
  
* Dir：返回滿足條件的所有文件、目錄的名字
  
* EOF
  
* FileAttr
  
* FileDateTime
  
* FileLen
  
* FreeFile Function
  
* GetAttr：返回文件、目錄的屬性值
  
* Input：讀取文件
  
* Loc：文件指針位置
  
* LOF：文件打開時的指針位置
  
* Seek：文件指針定位
  
* Spc：使用 Print 做 position output
  
* Tab：用於 Print 函數

* Error: 錯誤號對應的錯誤消息

* Windows Registry 中的數據：GetAllSettings、SaveSetting、DeleteSetting、GetSetting

* GetObject：ActiveX 組建的引用

* IMEStatus：返回當前 Input Method Editor (IME)。

* Macintosh 平台：MacID、MacScript

* 金融函數：
  
* DDB：使用 double-declining balance 計算貶值
  
* FV: 計算固定利率的年金
  
* IPmt：計算利率
  
* IRR：計算利率
  
* MIRR：計算利率
  
* NPer：計算周期數
  
* NPV：計算 net present value
  
* Pmt：計算支付數
  
* PPmt：計算本金支付數
  
* PV：計算 present value
  
* Rate：利息率
  
* SLN：straight-line depreciation
  
* SYD：計算 sum-of-years' digits depreciation

* Partition：返回字符串，表示一個數值名字落在各個 range 內。常用於 SQL select 語句

* QBColor：顏色值

* RGB：顏色值

* TypeName：得到變量的類型名

* VarType：得到變量的類型數



表達式

比較特殊的運算符有指數運算 ^，浮點除法 /，整數除法 \，取模運算 Mod，不等邏輯比較運算 <>



參考文獻



外部連結


* 官方網站：
  
* Docs - Office Dev Center （頁面存檔備份，存於網際網路檔案館）
  
* 文檔 - Office 開發人員中心 （頁面存檔備份，存於網際網路檔案館）