变量

值可以变化的量就是变量。变量主要是用来保存程序运行过程中需要的临时保存值或对象。

声明变量

变量都是保存在内存中的,要想使用变量,首先需要在内存中申请一块区域用来保存变量的值。声明变量就可以申请内存区域。那么如何声明变量呢?
声明变量的语法格式如下:
Dim 变量名 As 数据类型

Dim语句主要用于声明变量并分配储存空间。其主要目的是告知用户该变量为自定义变量,声明后程序会自动记录该变量的类型等信息。

变量名命名要求

  1. 变量必须以字母或汉字开头(日语假名,汉语也是可以的),不能包含空格、句号、感叹号、@、&、$和#等特殊符号,最长不能超过255个字符(一个汉字计2个字符)。
  2. 不区分大小写。
  3. 使用的名称不能与VBA本身的函数和关键字相同。

注意: VBA本身的函数和关键字就不介绍了。请参考。

数据类型将会在下一节介绍。

例1,声明变量a,b。过程名是varTest,关于过程的讲解会在以后的教程中详细说明,现在你就将其理解成VBA的执行单位,里面可以包含代码。

1
2
3
4
5
6
7
Sub varTest()
    '声明变量a,是Integer类型
    Dim a As Integer

    '声明变量b,是String类型
    Dim b As String
End Sub

例2,声明不合法的变量1a,_b,VBE编辑器提示编译错误。

1
2
3
4
5
6
7
Sub varTest()
    '变量1a不合法,因为数字开头
    Dim 1a As Integer

    '变量_b不合法,因为下划线_开头
    Dim _b As String
End Sub

VBE编辑器提示编译错误如下图。

编译错误

变量赋值

声明变量只是定义了一个变量,但是还没有值。变量赋值其实就是将指定的数值、字符串、表达式等通过赋值符号“=”赋给指定的变量名。
变量赋值的格式:
变量名 = 变量值

例3,声明变量a,b,c并赋值。最后在立即窗口打印变量的值。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
Sub varTest()
    '声明变量a,是Integer类型
    Dim a As Integer
    '声明变量b,是String类型
    Dim b As String
    '声明变量c,是Integer类型
    Dim c As Integer

    '给变量a赋值为整数100
    a = 100
    '给变量a赋值为字符串hello World
    b = "hello World"
    '给变量c赋值为变量a和100相加,也就是200
    c = a + 100

    '在立即窗口打印变量a,b,c的值
    Debug.Print a
    Debug.Print b
    Debug.Print c
End Sub

以上程序的运行结果如下:

立即窗口运行结果

隐式声明

隐式声明是指在使用一个变量之前,并没有声明该变量。使用该变量时,vba会自动创建该变量,变量会被自动分配一个数据类型Variant,可以保存数字、字符串和其他信息类型。与隐式声明相对,上面所讲的Dim语句声明变量也称为显式声明变量。

TypeName函数可以显示变量的类型。Variant类型的数据返回Empty。

例4,显式声明变量a,b,隐式声明变量c

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
Sub varTest()
    '声明变量a,是Integer类型
    Dim a As Integer
    '声明变量b,是String类型
    Dim b As String

    Debug.Print TypeName(a)
    Debug.Print TypeName(b)
    Debug.Print TypeName(c)
End Sub

以上程序的运行结果如下:

1
2
3
Integer
String
Empty

强制声明变量(取消隐式声明变量)

虽然隐式声明很方便,但是随着你写的程序的增大,会越来越发现隐式声明变量带来的错误难以排查。如何才能避免隐式声明的变量呢?有两种方法。推荐方法一。

方法一,在过程的外面添加Option Explicit代码

例5,在varTest过程的外面,添加Option Explicit代码

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
Option Explicit

Sub varTest()
    '声明变量a,是Integer类型
    Dim a As Integer
    '声明变量b,是String类型
    Dim b As String

    Debug.Print TypeName(a)
    Debug.Print TypeName(b)
    Debug.Print TypeName(c)
End Sub

由于c是隐式声明的变量,运行出现编译错误。

编译错误

如果添加上变量c的声明,编译错误就会消失。修改后的代码如下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
Option Explicit

Sub varTest()
    '声明变量a,是Integer类型
    Dim a As Integer
    '声明变量b,是String类型
    Dim b As String
    '声明变量c,是Variant类型
    Dim c As Variant

    Debug.Print TypeName(a)
    Debug.Print TypeName(b)
    Debug.Print TypeName(c)
End Sub

以上程序的运行结果如下:

1
2
3
Integer
String
Empty

方法二,选择“工具”–“选项”,弹出选项对话框。选中“强制声明变量”,如下图

强制声明变量

常量

与变量相对应的就是常量,值不可以变化的量就是常量。常量的值一旦声明后就不可以更改。

声明常量

声明常量的语法格式如下:
Const 常量名 As 数据类型=常量值

Const语句声明常量并设置其值。

常量名的命名要求和变量的命名要求一样,请参考变量命名要求。

可以将常量声明为以下数据类型之一: Boolean、 Byte、 Integer、 Long、 Currency、 Single、 Double、 Date、 String或Variant。数据类型详细将会在下一节介绍。

例6,声明常量a,b,pi,并在立即窗口打印出来

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
Sub constTest()
    '声明常量a,是Integer类型
    Const a As Integer=100

    '声明常量b,是String类型
    Const b As String="hello world"

    '声明常量pi,是Single类型
    Const pi As Single = 3.14

    Debug.Print a
    Debug.Print b
    Debug.Print pi
End Sub

以上程序的运行结果如下:

1
2
3
 100
hello world
 3.14

可在一个语句中声明多个常量。 若要指定数据类型,必须为每个常量包括数据类型。

例7,在一个语句中声明常量a,b,pi,并在立即窗口打印出来

1
2
3
4
5
6
7
8
9
Sub constTest()

    '声明常量a,是Integer类型。声明常量b,是String类型。声明常量pi,是Single类型
    Const a As Integer=100,b As String="hello world",pi As Single = 3.14

    Debug.Print a
    Debug.Print b
    Debug.Print pi
End Sub

以上程序的运行结果如下:

1
2
3
 100
hello world
 3.14

声明常量还有可以省略数据类型。也就是As 数据类型是可以省略的。

例8,在一个语句中声明常量a,b,pi(省略数据类型),并在立即窗口打印出来

1
2
3
4
5
6
7
8
9
Sub constTest()

    '声明常量a,b,pi(省略数据类型)
    Const a=100,b="hello world",pi=3.14

    Debug.Print a
    Debug.Print b
    Debug.Print pi
End Sub

以上程序的运行结果如下:

1
2
3
 100
hello world
 3.14

vba语言本身定义了很多常量,在以后的学习过程中会一一介绍。


转载请注明本网址。