变量作用域分类

变量作用域分类

VBA 中,变量的作用域决定变量在哪里能被获取和使用。根据变量的声明位置和声明方式,变量的作用域从小到大有以下 3 种:

过程作用域

模块作用域

工程作用域

过程作用域

过程函数内部声明的变量,只有在当前过程或函数内被使用。例如:

Sub Test()

    Dim name As String
    Dim age As Integer
    
    name = "张三"
    age = 35

End Sub

它们只能在该过程中内使用,包括赋值和读取。如果尝试在外部和其他过程中直接使用它们,VBA 会提示变量未定义错误

模块作用域

在一个模块中,在任何一个过程和函数外面,使用关键词 Private 或 Dim 声明的变量,称之为模块变量,其作用域是当前模块。

Dim guest As String    //等同于private guest As String

Sub Test()

    Dim message As String
    
    guest = "张三"
    message = "你好"
    
    MsgBox message & "! " & guest

End Sub

Private:将过程、变量或对象声明为 Private 时,它们只能在当前模块中访问和使用。其他模块无法直接访问或使用被声明为 Private 的成员。

Public:将过程、变量或对象声明为 Public 时,它们可以在当前模块以及其他模块中访问和使用。其他模块可以直接引用并调用被声明为 Public 的成员。

工程作用域

Excel VBA 中,一个 Excel 工作簿是一个 VBA 工程。与之对应,工程作用域表示变量在当前工程中的模块、Excel 对象、用户窗体、类模块中均可以被使用。

工程级别变量,在所在模块顶部声明 Option Private Module 修饰语句前提下,在过程或函数外面,使用关键词 Public 声明的变量,其作用域是当前工程

例如Module1 模块中的代码:

Public Sub Test()
    Dim message As String
    guest = "张三"
    message = "你好"
    MsgBox message & "! " & guest
End Sub

Module2 模块中的代码:

Sub CallPublicProcedure()
    Module1.test         ' 使用模块名(Module1)调用公共过程
End Sub

以上例子中,变量 guest 是使用 Public 关键词声明,是工程级别变量。它在当前工程中其他的模块中也能被使用。 

Tips:当相同名称的变量,多次以不同的作用域声明时,出现作用域冲突。这种情况,VBA 会自动以就近原则使用变量,即优先使用最近定义的变量。

posted @ 2023-06-22 01:20  iZJ"Qq4577105  阅读(20)  评论(0编辑  收藏  举报