了解作用域和可见性

作用范围是指供另一个过程使用的变量常量过程的可用性。 有三种范围级别:过程级、私有模块级和公共模块级。

声明变量时即确定了变量范围。 最好显式声明所有变量,以避免具有不同范围的变量间发生命名冲突错误。

过程级范围

在一个过程内定义的变量或常量在该过程外不可见。 只有包含变量声明的过程可以使用它。 在以下示例中,第一个过程显示一个包含字符串的消息框。 第二个过程显示一个空白消息框,因为该变量对于第一个过程而言是局部变量。

Sub LocalVariable() 
 Dim strMsg As String 
 strMsg = "This variable can't be used outside this procedure." 
 MsgBox strMsg 
End Sub 
 
Sub OutsideScope() 
 MsgBox strMsg 
End Sub

专用模块级范围

可以在模块的声明部分定义模块级变量和常量。 模块级变量可以是公共的,也可以是私有的。 公共变量可用于项目中所有模块中的所有过程;私有变量仅用于该模块中的过程。 默认情况下,使用“声明”部分中的 Dim 语句声明的变量的范围是私有的。 但是,通过在变量前面加上 Private 关键字,作用范围在您的代码中将变得显而易见。

在以下示例中,字符串变量 strMsg 可用于模块中定义的任何过程。 调用第二个过程时,它会在对话框中显示字符串变量 strMsg 的内容。

' Add following to Declarations section of module. 
Private strMsg As String 
 
Sub InitializePrivateVariable() 
 strMsg = "This variable can't be used outside this module." 
End Sub 
 
Sub UsePrivateVariable() 
 MsgBox strMsg 
End Sub

注意

标准模块类模块中的公共过程可用于任何引用项目。 若要将模块中所有过程的范围限制为当前项目,请将 Option Private Module 语句添加到模块的“声明”部分。 公共变量和过程仍可用于当前项目中的其他过程,但不能用于引用项目。

公共模块级别范围

如果将模块级变量声明为公共变量,则它可用于项目中的所有过程。 在以下示例中,项目中任何模块中的任何过程都可以使用字符串变量。

' Include in Declarations section of module. 
Public strMsg As String 

除了事件过程,所有过程默认情况下都是公共的。 当 Visual Basic 创建一个事件过程时, Private关键字将自动插在过程声明前。 对于所有其他过程,如果不希望该过程为 public,则必须使用 Private 关键字显式声明过程。

使用引用项目中的标准模块或类模块中定义的公共过程、变量和常量。 但是,您必须首先设置对定义它们的项目的引用。

在标准模块或类模块(如 表单模块 或报表模块)以外的其他模块中定义的公共过程、变量和常量不能用于引用项目,因为这些模块对于它们所在的项目是专用的。

另请参阅

支持和反馈

有关于 Office VBA 或本文档的疑问或反馈? 请参阅 Office VBA 支持和反馈,获取有关如何接收支持和提供反馈的指南。