跳转到内容

Visual Basic for Applications

维基百科,自由的百科全书

这是本页的一个历史版本,由Newmangling留言 | 贡献2017年1月28日 (六) 00:07编辑。这可能和当前版本存在着巨大的差异。

Visual Basic for Applications(VBA)
Visual Basic for Applications logo
Visual Basic for Applications logo
编程范型Multi-paradigm編程語言
實作者Microsoft
发行时间1993年
当前版本
  • 7.1(2012;穩定版本)
編輯維基數據鏈接
型態系統靜態/動態混合強/弱混合
操作系统Microsoft Windows, Mac OS X
許可證專有EULA
網站learn.microsoft.com/en-us/office/vba 編輯維基數據鏈接
受影响于
QuickBASIC, Visual Basic

Visual Basic for Applications(VBA)是一種Visual Basic的一種巨集語言,主要能用來擴展Windows的應用程式功能,特別是Microsoft Office軟體。也可說是一種應用程式視覺化的Basic Sc​​ript。 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 

數組

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 If
Erase 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

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 循環控制變量

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等修飾。

常用函数

  • MsgBox
  • InputBox
  • Fix 向0取整,Int向下取整, Round四舍五入
  • Rnd 返回0-1内的单精度随机数
  • InStr([Start, ]<Str1>,<Str2>[, Compare]) 查找子串
  • Len 字符串长度
  • Left,Right,Mid 截取子字符串
  • Space(数值) 生成空格字符串
  • Ucase,Lcase 大小写转换函数
  • Ltrim, Rtrim,Trim 删除首尾空格
  • Date,Time,Now 返回日期时间
  • Year, Month, Day, WeekDay,Hour,Minute,Second 截取日期时间分量
  • DateAdd 日期/时间增量函数
  • DateDiff(<间隔类型>,<日期1>,<日期2>[,W1][,W2]) 日期/时间的距离函数
  • DatePart(<分割类型>,<日期>[,w1][,w2]) 时间分割函数
  • DateSerial(<表达式1>,<表达式2>,<表达式3>) 合成日期;DateValue(“字符串表达式”)返回日期;
  • Asc(<字符串表达式>)返回第一个字符的Ascii编码值;Chr(ASCII码)返回字符;Str(<数值表达式>)返回字符串;
  • 转换函数:CBool、CByte、CCur、 CDate、 CDbl、CDec、CInt、 CLng、CSng、CStr、CVar
  • Nz(表达式或字段属性值[,规定值])如果是空,则返回0或者""或者函数的第二个参数值
  • 验证函数:isNumeric、isDate、isNull、isEmpty
  • DLookup(expression, TableOrQueryName, [criteria]) 数据库查询函数

表达式

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

參考文獻

外部連結