VBA 变量

变量用于存储数据。

变量的使用主要包括三个步骤:声明、写、读。

1)声明:声明变量。为变量分配相应内存空间。

2)写:变量赋值。即往变量写数据。

3)读:读取变量。在表达式、函数参数中使用变量,即会从变量读取已经写入的数据。


1 变量声明

Dim 变量名 As 数据类型

Dim 完整英文Dimension,意为分配内存空间。

变量名 由我们自定义。

数据类型 主要使用系统定义的数据类型,常见的字符串String、整型Integer、字节型Byte、长整型Long、单精度小数Single、双精度小数Double、布尔型Boolean、日期型Date、对象型Object、变体型Variant、以及自定义类型。

示例。声明整型变量i,布尔类型变量b

Dim i As Integer  '声明整型变量i
Dim d As Double   '声明小数变量d

注:上述代码写在过程var1中,完整代码如下:

Sub var1()
  Dim i As Integer  '声明整型变量i
  Dim d As Double   '声明小数变量d
End Sub

变量名的命名规则

变量名称规则符合标识符规则。

1)名称可包含:由字母(含中文)、数字、下划线

2)名称首字母:由字母(含中文)、下划线

3)名称中不能包含:空格、句号(.)、感叹号(!)、@、#、$、%、等特殊符号

4)名称中不能与关键字相同。


变量名的命名规范

见名思义。根据过程的作用命名,保证看到过程的名称就知道它的作用。


规则与规范的差别:不满足规则程序会报错,不满足规范程序不会报错,但大家都通常不这么做。


2 变量赋值(写数据)

简单数据类型的变量赋值,语法如下

变量名=值

Let 变量名=值

值的类型需要变量名的类型一致。

不建议使用Let,麻烦。

示例。为变量i赋值为2023,变量d赋值为2023.61。

i = 2023      '变量赋值,即往变量写数据
d = 2023.61     '变量赋值,写数据

常见错误

错误1:赋值类型不匹配

i = "hello" '整型变量赋值字符串,错误写法。

如果赋值类型不匹配则会报错“类型不匹配”。


3 读取变量

在函数中使用变量,即会读取变量的值。

Debug.Print i    '打印变量,即读取变量数据
Debug.Print d    '打印变量,读数据

完整代码如下:

Sub var1()
  Dim i As Integer  '声明整型变量i
  Dim d As Double   '声明小数变量d
  i = 2023      '变量赋值,即往变量写数据
  d = 2023.61     '变量赋值,写数据
  Debug.Print i    '打印变量,即读取变量数据
  Debug.Print d    '打印变量,读数据
End Sub

运行结果如下:

VBA 变量

在表达式中使用变量的值,也会读取变量的值。

Dim i2 As Integer
i2 = i + 1
Debug.Print i2

i2=i+1表示读取变量i的值,计算i+1的结果,往变量i2中写数据。

针对i是读数据,针对i2是写数据。


4 同类型多个变量的声明

同类型多个变量可以在一行中进行声明。

语法

Dim 变量1, 变量2, … 变量n As 数据类型

示例

Sub var2()
  Dim i1, i2, i3 As Integer
  i1 = 100
  i2 = 200
  i3 = 300
  Debug.Print i1, i2, i3
End Sub

注:Debug.Print 后多个参数以逗号隔开,则输出每项后会跟制表符。


5 声明变量不声明数据类型

因为不规范,不推荐使用。

声明变量不声明数据类型。

语法

Dim 变量名

等价完整代码

Dim 变量名 As Variant

示例

Sub var3()
  Dim i1
  i1 = 100
  Debug.Print i1
End Sub

<TODO链接>查看Variant详情


6 变量不声明直接使用

这种用法并不规范,不推荐使用。

但是,学习过程中,有时候用起来真的方便:)

Sub var4()
  i1 = 200
  Debug.Print i1
End Sub

7 强制变量显示声明

VBA提供功能保证变量必须要先声明再使用,即强制变量显示声明。

Option Explicit

Option 意思为选项。

Explicit 意思为显式。

这句代码通常放在文件的最开头。

再执行前面的var4过程,会提示报错:变量未定义。

VBA 变量未定义


8 更多

<TODO链接>查看 变量作用域

<TODO链接>查看 static变量