不同作用域的变量
作用域 描述
单个过程 在一个过程中使用Dim或Static语句声明的变量,作用域为本过程,即只有声明变量的语句所在的过程可以使用它。这样的变量称为本地变量
单个模块 在模块的第1一个过程之前使用Dim或Private语句声明的变量,作用域为声明变量的语句所在模块中的所有过程,即该模块中所有的过程都
可以使用它。这样的变量称为模块级变量
所有模块 在一个模块的第1个过程之前使用Public语句声明的变量,作用域为所有模块,即所有模块中的过程都可以使用它。这样的变量称为公共变量。
1.定义本地变量:
如果在一个过程中使用Dim或Static语句声明变量,声明的变量即为本地变量,如:
Sub 本地变量()
Dim a As String '定义一个String类型的变量,名称为a
Static b As Integer '定义一个Integer类型的变量,名称为b
End Sub
如果一个变量被声明为本地变量,那该变量的作用域为本过程,只有定义变量的语句所在的过程才可以使用它。
2.定义模块级变量
如果想让同一模块中的所有过程都能使用定义的变量,可以在模块的第1个过程之前使用Dim或Private语句定义变量,这样该模块中所有的过程
都可以使用定义的变量。
Option Explicit
'第一个程序
Dim a As String '定义一个String类型的变量,变量名为a
Private b As String '定义一个String类型的变量,变量名为b
Sub 合并文本()
a="我在ExcelHome论坛" '给变量a赋值
b="学习Excel" '给变量b赋值
MsgBox a & b '用对话框显示变量a和变量b合并后得到的文本
End Sub
注:虽然在过程中没有定义变量a和b,但过程依然正常执行,这是因为变量a和变量b被定义为模块级变量。
3.定义公共变量
声明为模块级的变量只能被同一个模块中的过程使用,如果想让不同模块中的过程都能使用声明的变量,应将该变量定义为公共变量。
如果要将变量声明为公有变量,应在模块的第1个过程之前使用Public语句声明它。
Option Explicit
Public c As String
Sub 公有变量()
c="我是一个公有变量" '给变量c赋值
End Sub
注:如果一个变量被定义为公共变量,拿在任意模块的任意过程中都可以使用它。公共变量必须在模块中声明,在工作表、窗体等其他对象中、即使使用了Public关键字声明变量,该变量也只能被声明为
模块级变量。
4.静态变量
静态变量的情况比较特殊。这些变量在过程层次上进行变量的声明,当过程正常结束时,静态
变量保持它们的值不变。然而,如果有一条End语句中止了该过程,静态变量将丢失它的值。
注意,End语句与End Sub语句并不相同。
使用关键字Static可以声明静态变量:
Sub MySub()
Static Counter as Long
'- [Code goes here] -
End Sub
网友评论