类模块的全局变量声明

时间:2014-02-05 20:46:17

标签: excel vba excel-vba

我有一个包含多个模块和多个子的工作簿。虽然有一些变量在大多数潜艇中不断使用,例如给定的工作台。

例如

dim cr as worksheet
set cr=sheets("combined_report")

我写的太多了。我可以在一个类模块中写一次,并在任何模块的任何子模块中使用“cr”而无需重新分配吗?

2 个答案:

答案 0 :(得分:9)

您可以使用标准模块中的函数执行此操作,并使用Static关键字缓存引用:

Function CR() As Worksheet
    Static CRSheet As Worksheet
    If CRSheet Is Nothing Then Set CRSheet = Sheets("combined_report")
    Set CR = CRSheet
End Function

答案 1 :(得分:4)

是的,你可以!

通常,您可以在使用Global关键字声明子/函数之前在任何模块中定义全局变量,例如

Option Explicit

Global cr as Worksheet

Public Sub mySub...

全局变量将保持其范围 - 但当然,您必须首先进行初始化,即为其分配值/对象。

最佳做法是使用g为全局变量添加前缀,例如gWSMain,所以你总是知道你正在处理一个全局变量。

如果您只需要工作簿中的一个或多个特定工作表的全局变量,则根本不需要全局变量!相反,您可以使用其代码名称直接访问它们。这些通常是Sheet1Sheet2等 - 但您可以在属性窗口中更改名称。

这些工作表在您的应用程序中全局可用,与ThisWorkbook相同。