1局部变量
在事件过程或通用过程中,用关键字Dim 或Static声明的变量,或隐式声明的变量就是局部变量。局部变量的作用范围是所定义的过程内部。
【例1】局部变量举例,如图1所示。

在Command1_Click()和Command2_Click()事件过程中分别声明的两个变量x、y都是局部变量,每个变量只在相应过程内部有效,若在Comman2_Click()中使用变量x,则系统提示出错,如图1所示。
【例2】有如下一段程序,应用变量n记录单击窗体的次数。
Private Sub Form_Click()
Dim n
As Integer
n = n
+ 1
Print
"已单击次数:"; n; "次"
End Sub
程序运行多次后单击窗体的输出如图2所示,结果总是“已单击次数1次”,因为变量n由Dim声明为动态变量,每次单击窗体时变量n都重新初始化为0,因此输出结果总是“1次”。若想实现统计单击窗体次数,应将Dim n As Integer改为Static n As Integer,即将n声明为静态变量,保留上次操作的结果。


Dim与Static的区别:用 Static 声明的局部变量的值一直存在,这种变量称为静态变量,而用Dim声明的局部变量的值只在过程执行期间才存在,过程执行完毕,变量的值就被释放。也就是说,当过程再次被执行时,Static定义的变量值为上一次运行的结果,而Dim定义的变量值为初始值。
【例3】测试Dim与Static的区别。
Private Sub Command1_Click()
Dim x As
Integer
Static y As
Single
x = x + 2
y = y + 2
Print “x=”;x,”y=”;y
End Sub
每单击一次命令按钮,x的值都是初始值0加2,而y的值却是上一次运行结果加2,如图3所示。这就是Dim和Static的区别,应按其各自的特点在不同情况下使用。
2模块变量
在模块的声明段中,用关键字Dim 或Private声明的变量就是模块变量。模块变量的作用范围是所在模块的所有过程。
Dim与Private没有区别,但使用Private更好一些,因为便于区分局部变量,从而增加代码的可读性。
【例4】模块变量举例,程序及运行结果如图4所示。

在窗体模块Form1的通用声明段中声明的变量num1是模块变量,对下面两个按钮单击事件过程都有效,每次运行事件过程都会更新变量的值,直到该模块运行完毕变量的值才被释放。
3全局变量
在标准模块的声明段中,用关键字Public或Global声明的变量就是全局变量。全局变量的作用范围是整个工程的所有过程。
三种变量的区别见表1。
表1 三种变量作用范围对照表
|
名称 |
作用范围 |
声明位置 |
使用语句 |
|
局部变量 |
过程内部 |
过程中 |
Dim或Static |
|
模块变量 |
窗体模块或标准模块 |
模块的声明部分 |
Dim或Private |
|
全局变量 |
整个工程 |
标准模块的声明部分 |
Public或Global |
定义变量的作用范围及简单说明如下,
在标准模块Module1中定义的语句:
Public x As integer ‘全局变量x可以在每个模块、每个过程中使用
在窗体模块Form1中定义的语句:
Dim y As string ‘模块变量y在以下两个过程中都可以使用
Sub Form_Click()
Dim a%, b! ‘局部变量a,b只能在窗体单击过程中使用
End Sub
Sub Command1_Click()
Static m%, n# ‘局部变量m,n只能在按钮单击过程中使用
End Sub
4符号常量作用范围
符号常量定义以后,在程序中就可以用常量名代替常量的值,例如:可以用Pi 代替3.1415926,但是这种替代是有范围的,有效范围由常量定义语句的位置决定,有以下三种情况:
⑴ 如果在一个过程内部声明一个符号常量,则该符号常量只在该过程中有效。
⑵ 如果在一个模块的声明段中声明一个符号常量,则该符号常量只在该模块的所有过程中有效。
⑶ 如果在标准模块的声明段中声明一个符号常量,并在 Const前面加上Public关键字,则该符号常量在整个工程中都有效。
【例5】 检测符号常量的作用范围。程序代码及运行结果如图5所示。

从图中可以看到符号常量one是在模块的声明段中声明的,在下面两个过程中都有效,而符号常量two是在Command2_Click()过程内部声明的,仅在该过程内部有效,所以在Command1_Click()过程中Print two语句没有结果。

