7.3.5 变量
7.3.5 变量
变量就是在程序运行过程中可以随着赋值而不断改变的数据量,变量可以理解为给内存中某块存储区域起名。程序中,该存储区域可以存储一个值,根据需要存储值可以不断发生改变,但需要注意的是,一旦给变量赋新值,它原来的值将被覆盖。
1.变量的命名
程序通过变量名来访问该变量所命名的存储区域,每一个变量都必须有变量名,变量命名应遵循以下规则:
①变量以字母开头,可以包含字母、数字、下划线;
②不能使用VBA保留字,因为保留字已经定义为具有特定意义的名称,如命令单词就是保留字,如果命令单词再被当成变量使用,系统将分不清命令和变量名;
③不能超过255个字符;
④在变量的作用域中,变量的名称必须是唯一的。
例如:a_b、ab、a8都是合法的变量名,而8a、a+b、dim都不是合法的变量名,8a是因为变量没有以字母开头,a+b是因为使用了除字母、数字、下划线以外的字符“+”,dim是因为使用了保留字。
在给变量命名时,应注意以下几点:
①最好使用有意义、容易记忆的变量名,即要见名知义,如用stu_name代表学生名,stu_no代表学生学号等;
②变量名虽然最多可以有255个字符,但在使用中不宜太长,太长的变量名不便于阅读和书写;
③变量名不能与过程名、符号常量名、数组名同名,更不能使用系统的关键字做变量名;
④尽量采用所用高级程序设计语言建议的变量名前缀或后缀的约定来命名,以便区分变量的类型,如Int_Age、Str_Name。
VBA中变量名不区分大小写,为了便于阅读,建议大小写混合使用组成变量的名称,如Int_Age。
2.变量的声明
变量的声明就是指定变量数据类型,以便系统为该变量在内存中分配相应的存储空间。变量声明的方法有以下两种。
1)显式声明
变量显式声明语法格式如下:
Dim|Public|Private|Static <变量名1> As <数据类型>[,<变量名2> As <数据类型>…]
例如:以下语句声明了2个不同类型的变量:
Dim stu_name as string,stu_age as integer
上例中stu_name被定义成变长字符型,定义变长字符型时,可如下例所示:
Dim stu_name as string*4
本例定义stu_name为定长字符型,该变量限定最多容纳4个字符。
变量声明定义后,数值型初始值为0,字符型初始值为空字符串。
2)隐式声明
如果变量声明时不指定数据类型,或在程序编写过程中,变量不声明直接赋值使用,这时系统默认该变量为变体型。例如:
dim x,y 'x,y均为变体型变量
m=1 'm没有声明直接赋值使用,系统默认为变体型
使用声明语句建立一个变量后,VBA自动将数值类型的变量赋初值为0,字符型赋初值为一个空字符串(""),变体型变量被初始化为空,布尔型被初始化为False。
3.变量的作用域
在VBA中,变量可以使用的范围称为作用域,变量的定义位置和定义关键字不同,则其作用域就不同,变量定义位置可以是过程内部、模块通用声明段,关键字有Dim、Private、Static、Public,具体见表7-4。
表7-4 变量的作用域
4.变量的生存期
变量的生存期是指变量在计算机内存中存活的时间,对于局部变量而言,其生存期就是定义该变量的过程运行期间,即过程运行时,过程体中定义的局部变量有效,过程运行结束后,过程体中定义的局部变量无效。
但在过程体中,使用Dim和Static定义,其含义是不同的,Dim定义的是动态变量,即定义的动态变量随着过程的执行而创建,随着过程执行结束而释放,也就是说,用Dim关键字定义的过程级变量,其生存期仅仅是过程被执行的时间范围,每次过程被执行,变量都要经过创建、释放这样的过程,因此这样的变量被称为动态变量。
使用Static关键字定义的变量称为静态变量。和动态变量不同,静态变量在过程第一次执行被创建,过程执行结束不会被释放,下次该过程再被执行时,静态变量在上次执行过程中赋予的值将保留,而不是像动态变量那样被重新初始化。
模块级变量随着模块执行而创建,模块执行结束而释放,其生存期在模块执行期,如某一窗体模块执行后,定义的模块级变量在该窗体任何位置都可以被引用,窗体执行结束后,模块级变量也随之消失。
全局变量随着所定义模块的执行而创建,模块执行结束,全局变量也不会释放,而是一直存放在内存中,直到整个数据库关闭。
5.变量的赋值
变量用于在程序运行过程中临时存放数据,因此,变量在程序运行过程中要不断地获取数据,变量通过赋值语句获取数据,赋值语句的语法格式如下:
<变量名>=<表达式>
表达式可以由加、减、乘、除或其他运算符及函数等构成,也可以是一个常量,其运算过程为先进行右边表达式的运算,然后再将其运算结果保存到左边的变量中。“=”的意思就是赋值,即将表达式的结果赋值给变量。
以下是几个赋值语句示例:
赋值语句和等号不同,等号表示两个值相等,而赋值语句表示将表达式的值存到变量中。变量在赋值前可能已经有值,经过重新赋值,新值将代替旧值。如:
a=12
a=24
经过两次赋值,a第一次获得值12,第二次被改为24。