首页 百科知识 变量的作用域与生命周期

变量的作用域与生命周期

时间:2022-10-03 百科知识 版权反馈
【摘要】:变量是程序运行期间内值可以改变的量。变量在使用前应该进行声明, 用Dim或Static语句显式声明局部变量。声明语句用于命名和定义常量、 变量、 数组和过程。局部变量仅在该过程范围中有效。在模块级变量声明区域, 用Dim...As关键字声明的变量的作用域就属于模块范围。

一、 常量

VBA在运行时其值始终保持不变的量。 常量有直接常量、 符号常量、 系统常量和内部常量, 其中:

•日期常量: 放在双引号内, 日期/时间型常量放在一对#内。

例如: #2013-08-1110:25:00pm# '有效的日期型数据

#13/23/2013# '有效的日期型数据

#03-25-201320:30:00# '有效的日期型数据

•符号常量: 用标识符保存一个常量值, 一般使用Const语句定义常量。

例如: Const Pai=3.14159

Const Term Begin Date=#9/1/2013#

•系统常量: True和False、 Yes和No、 On和Off和NULL。

•内部常量: 通常指明对象库常量, 来自Access库的常量以 “ac” 开头, 来自ADO库的常量以 “ad” 开头, 而来自Visual Basic库的常量则以 “vb” 开头。 例如: ac Form、ad Add New、 vb Currency。

二、 变量

变量是程序运行期间内值可以改变的量。 变量在使用前应该进行声明, 用Dim或Static语句显式声明局部变量。

1. 变量名的命名规则

(1) 必须以字母 (或汉字) 开头;

(2) 可以包含字母、 数字或下划线字符;

(3) 不能包含标点符号或空格等;

(4) 最长不能超过255个字符;

(5) 不能是VBA关键字 (如For、 To、 Next、 If、 While等)。

注意: 字母不区分大小写, 如 “New Var” 和 “newvar” 代表的是同一个变量。

2. 格式:

Dim<变量1>As<类型1>[,<变量2>As<类型2>[,...]]

Static变量[As类型]

Static Sub过程名[(实参列表)]

Static Function函数名[(实参列表)][As类型]

语句中的 “As类型” 子句是可缺省的。 如果使用该子句, 就可以定义变量的数据类型。未定义时默认变量的类型为变体型 (Variant)。

VBA中允许不事先声明而直接使用变量, 若添加语句Option Explicit, 则使用的变量必须事先声明, 否则VBA会发出警告信息。 强制实现变量先定义后使用也可以通过菜单实现,方法是单击 【模块】 菜单, 选中 “工具” 命令下的 “选项” 对话框, 在 “要求变量声明”复选框中打钩, 如图9.15所示。

图9.15 选项对话框

例如:

Dimi Asinteger,j Asinteger,s:表示i,j为整型变量,s为变体型变量。

Dim Student Name As String:表示Student Name为字符串变量。

Dim Grade As Integer,Avg Grade As Single:表示Grade为整型,Avg Grade为单精度。

Dim Passed As Boolean,Exam Date As Date:表示Passed为布尔型,Exam Date为日期型。

Static Variable1as Integer:表示Variable1是静态整型变量。

声明语句用于命名和定义常量、 变量、 数组和过程。 在定义了这些内容的同时, 也定义了它们的作用范围, 即局部、 模块或全局。 与使用的关键字 (Dim、 Public、 Static或Global) 有关。

3. 变量的作用域

在VBA编程中, 变量定义的位置和方式不同, 则它存在的时间和起作用的范围也有所不同, 这就是变量的作用域与生命周期。 VBA中变量的作用域分为下列3种:

(1) 全局变量 (Public)。

在标准模块的所有过程之外的起始位置声明的变量称为全局变量, 在标准模块的变量声明区域, 用Public...As关键字声明的变量的作用域就属于全局范围。 在数据库系统的所有地方都可使用。 即可被本应用程序的任何过程或函数访问。

(2) 局部变量 (Local)。

在模块的过程内部声明的变量称为局部变量, 一般在过程内用Dim语句或用Private语句声明。 在子过程或函数过程中声明的变量或直接使用的变量, 作用域都属于局部范围。 局部变量仅在该过程范围中有效。 包括在窗体对象、 报表对象、 模块对象之内定义的变量, 不能跨越所在对象。

要在过程的运行时永远保留局部变量的值,可以用Static关键词代替Dim定义静态变量。

(3) 模块级变量 (Module)。

在模块中的所有过程之外的起始位置声明的变量称为模块级变量。 在模块级变量声明区域, 用Dim...As关键字声明的变量的作用域就属于模块范围。 模块级变量仅在该模块范围中有效, 不能跨越所在对象。 此变量只能在模块的开始位置定义。

4. 变量的生命周期

(1) 变量的生命周期是指变量在运行时有效的持续时间。 变量的持续时间是指从变量声明语句所在的过程第一次运行到代码执行完毕并将控制权交回调用它的过程为止的时间。

(2) 每次子过程或函数过程被调用时, 以Dim...As语句声明的局部变量, 会被设定默认值, 数值类型变量的默认值为0, 字符串型变量的默认值为空字符串 (""), 布尔型变量的默认值为False。 这些局部变量, 有着与子过程或函数过程等长的持续时间。

例如: 在一个标准模块中不同级别的变量声明:

Public Pa Asinteger '局变量

Private Mb Asstring '窗体/模块级变量

Sub F1()

Dim Fa Asinteger '局部变量

End Sub

Sub F2()

Dim Fb As Single '局部变量

...

End Sub

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈