Visual Basic for Applications

自定义的数据类型

相当于C语言的struct，例如：
Type 自定义类型名
     元素名As 类型
      …
     [元素名As 类型]
End Type

数组

Option Base 0 '數組索引值從0開始Option Base 1 '數組索引值從1開始Dim MyArray(10) '聲明一個數組變量，10是最大的可用的數組索引值MyArray(5) = 101 '給數組的元素賦值Dim Data(10,5) '聲明一個二維數組變量Data(1,1) = "A001" '給數組元素賦值Dim cArr(-11 To 20, 1 To 3) As String '聲明一個數組，定義數組索引值的上下界Dim dArr() As String '聲明動態數組ReDim dArr(0 To 5, 1 To 2) '改變動態數組的尺寸默認把原數據清除。如果保留原來的數據，必須加上參數Preserve。
                                '使用Preserve參數時只能改變最後一維的大小If UBound(vTemp) = -1 Then
     '判斷數組變量vTemp是否為 空數組End IfErase MyArrar, Data 'Eras​​e語句清除數組元素，釋放變量佔用的空間

常量

日期常量由符号“#”将字符括起来，如#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

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语句。通常可如此写程序：
 For 循環控制變量=初值 To 終值 Step 步長
    Do '用于模拟continue
        語句塊 
        If 条件 Then Exit Do '用于模拟continue
        語句塊 
    Loop While False '用于模拟continue
 Next

With语句

With 對象引用
   語句塊End With

On Error语句

On Error Goto 出錯處理語句的label '跳轉到出錯處理語句
或
On Error Resume Next '遇到錯誤，不管錯誤，繼續往下執行

注释语句

使用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)，这会导致一些对象的方法调用失败。例如：
    Dim cn As ADODB.Connection
    Set cn = CurrentProject.Connection
    Dim rs As New ADODB.Recordset    
    rs.Open "SELECT * FROM myTable" , cn

    Dim ExcelApp As New Excel.Application
    Dim ExcelWst As Worksheet
    Set ExcelWst = ExcelApp.Workbooks.Add.Worksheets(1)

    ExcelWst.Range("A2").CopyFromRecordset(rs) '失败，无法执行该行
    ExcelWst.Range("A2").CopyFromRecordset rs  '可成功执行该行

表达式

比较特殊的运算符有指数运算^，浮点除法/，整数除法\，取模运算Mod，不等逻辑比较运算<>