
在 VBA 中,过程(Sub)和函数(Function)同变量一样,其可访问范围也由声明方式决定,主要分为以下三类:
-
模块作用域
使用 Private 关键字显式声明的过程或函数,仅限于所在模块内部调用,对外不可见。即使在同一工程的其他模块中也无法引用。
Private Sub Test() End Sub
-
工程作用域
当模块顶部包含Option Private Module语句时,该模块内所有未加修饰符直接定义的过程(即省略 Public/Private 的 Sub 或 Function),默认具有工程作用域;同样,显式使用 Public 声明的过程也属于工程作用域。这类过程可在当前 Excel 工作簿(即整个 VBA 工程)内的任意模块、类模块、用户窗体或工作表事件中被调用,但无法跨工作簿访问。
Option Private Module Sub Test1() End Sub Public Sub Test2() End Sub
注:Test1 与 Test2 在本工程内均可被其他模块调用,二者作用域等效。
-
全局作用域
若模块顶部未声明Option Private Module,且过程以 Public 显式声明(或省略修饰符但位于无Option Private Module的模块中),则该过程具备全局作用域。它不仅能在当前工作簿的所有模块中调用,还可被其他已打开的工作簿中的 VBA 代码访问(前提是目标工作簿信任该宏来源),并直接出现在 Excel「宏」对话框列表中供手动运行。
Sub Test1() End Sub Public Sub Test2() End Sub
注:在无
Option Private Module的标准模块中,Test1和Test2均为全局可见,可跨工作簿调用(受宏安全设置限制)。











