VBA代码中包含变量、运算符和语句。变量在代码中起到互交与连接的作用。变量从创建为合适的对象与数据类型,到初始化,再通过运算符计算或执行语句修改,来完成整个互交的过程。
声明变量的关键词是Dim,其语法是
Dim [WithEvents] varname[([subscripts])] [As [New] type] [, [WithEvents] varname[([subscripts])] [As [New] type]] . . .
Dim 语句的语法包含下面部分:
部分 描述
WithEvents 可选的。关键字,说明 varname 是一个用来响应由 ActiveX 对象触发的事件的对象变量。只有在类模块中才是合法的。使用 WithEvents,可以声明任意个所需的单变量,但不能使用 WithEvents 创建数组。New 和 WithEvents 不能一起使用。
varname 必需的。变量的名称;遵循标准的变量命名约定。
subscripts 可选的。数组变量的维数;最多可以定义 60 维的多维数组。subscripts 参数使用下面的语法:
[lower To] upper [, [lower To] upper] . . .
如果不显式指定 lower,则数组的下界由 Option Base 语句控制。如果没有使用 Option Base 语句,则下界为 0。
New 可选的。可隐式地创建对象的关键字。如果使用 New 来声明对象变量,则在第一次引用该变量时将新建该对象的实例,因此不必使用 Set 语句来给该对象引用赋值。New 关键字不能声明任何内部数据类型的变量,以及从属对象的实例,也不能与 WithEvents 一起使用。
type 可选的。变量的数据类型;可以是 Byte、 Boolean 、Integer、Long、Currency、Single、Double、Decimal(目前尚不支持)、Date、String(对变长的字符串)、String * length (对定长的字符串)、Object、Variant、用户定义类型、或对象类型。所声明的每个变量都要一个单独的 As type 子句。
而在声明变量或创建变量的同时,最好先考虑好变量用什么数据类型,下面 表格显示所支持的数据类型,以及存储空间大小与范围。
数据类型 存储空间大小 范围
Byte 1 个字节 0 到 255
Boolean 2 个字节 True 或 False
Integer 2 个字节 -32,768 到 32,767
Long
(长整型) 4 个字节 -2,147,483,648 到 2,147,483,647
Single
(单精度浮点型) 4 个字节 负数时从 -3.402823E38 到 -1.401298E-45;正数时从 1.401298E-45 到 3.402823E38
Double
(双精度浮点型) 8 个字节 负数时从 -1.79769313486231E308 到
-4.94065645841247E-324;正数时从4.94065645841247E-324 到 1.79769313486232E308
Currency
(变比整型) 8 个字节 从 -922,337,203,685,477.5808 到 922,337,203,685,477.5807
Decimal 14 个字节 没有小数点时为 +/-79,228,162,514,264,337,593,543,950,335,而小数点右边有 28 位数时为 +/-7.9228162514264337593543950335;最小的非零值为 +/-0.0000000000000000000000000001
Date 8 个字节 100 年 1 月 1 日 到 9999 年 12 月 31 日
Object 4 个字节 任何 Object 引用
String
(变长) 10 字节加字符串长度 0 到大约 20 亿
String
(定长) 字符串长度 1 到大约 65,400
Variant
(数字) 16 个字节 任何数字值,最大可达 Double 的范围
Variant
(字符) 22 个字节加字符串长度 与变长 String 有相同的范围
用户自定义
(利用 Type) 所有元素所需数目 每个元素的范围与它本身的数据类型的范围相同。
其中的Variant是个很特殊的数据类型,它能表示除固定长度之外的所有值,并可以通过VarType来返回其数据子类型。其语法如下:
VarType(varname)
必要的 varname 参数是一个 Variant,包含用户定义类型变量之外的任何变量。
下面这个表表示VarType返回的值的意义:
常数 值 描述
vbEmpty 0 Empty(未初始化)
vbNull 1 Null(无有效数据)
vbInteger 2 整数
vbLong 3 长整数
vbSingle 4 单精度浮点数
vbDouble 5 双精度浮点数
vbCurrency 6 货币值
vbDate 7 日期
vbString 8 字符串
vbObject 9 对象
vbError 10 错误值
vbBoolean 11 Boolean 值
vbVariant 12 Variant(只与变体中的数组一起使用)
vbDataObject 13 数据访问对象
vbDecimal 14 十进制值
vbByte 17 位值
vbUserDefinedType 36 包含用户定义类型的变量
vbArray 8192 数组
变量因声明的位置与使用Public或Private关键字,其有效范围可能为3种:过程范围、模块范围与全局范围。当变量放在模块头部,并使用Public代替Dim时,这个变量就是全局变量;而如果是用Dim或者用Private代替Dim时,这个变量是模块级变量;而当变量在过程中声明就是过程变量了。
通常的过程变量在过程结束后值是不保存,但如果子程序使用Static语句,或者用Static声明的过程变量是例外的,下面用两个实例说明一下。
Static Sub ExcelbaSub2()
Dim X As Integer
MsgBox "X = " & X
X = X + 1
End Sub
Sub ExcelbaSub3()
Static Y As Integer
MsgBox "Y = " & Y
Y = Y + 1
End Sub
运行上面的过程,你就比较容易理解Static的用途了。
除了变量,我们还经常用到一些常量,包含系统定义与自定义的常量。常量与变量有很多相似之处,但常量的值是保持不变的,如果代码中常常出现一个数值,最好的方法就是定义成常量,这样既使代码易于编写,也让代码容易阅读。定义常量的关键词是Const,其语法是:
语法
[Public | Private] Const constname [As type] = expression
其中的expression就是常量的值,其它与变量相同,就不重复了。