我有一个包含多个模块和多个子的工作簿。虽然有一些变量在大多数潜艇中不断使用,例如给定的工作台。
例如
dim cr as worksheet
set cr=sheets("combined_report")
我写的太多了。我可以在一个类模块中写一次,并在任何模块的任何子模块中使用“cr”而无需重新分配吗?
答案 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
,所以你总是知道你正在处理一个全局变量。
如果您只需要工作簿中的一个或多个特定工作表的全局变量,则根本不需要全局变量!相反,您可以使用其代码名称直接访问它们。这些通常是Sheet1
,Sheet2
等 - 但您可以在属性窗口中更改名称。
这些工作表在您的应用程序中全局可用,与ThisWorkbook
相同。