Excel VBA中可以全局声明工作表对象吗?

我正在重构Excel 2003工作簿中的许多模块,并在每个模块的每个过程中声明相同的一组工作表; 我想在全球范围内宣布一次。 我可以将工作表名称设置为文字,例如:

Public Const xlwkGSModel = "gs_model" As String 

然后在程序中使用:

 ...ActiveWorkbook.Worksheets(xlwkGSModel).Cells(1,1) 

但有没有办法来声明工作表对象,以便过程中的代码可以是:

 ...xlwkGSModel.Cells(1,1) 

“1。 插入一个模块

“2。 在模块中声明工作表公共variables,如下所示

 Public xlwkGSModel As Worksheet 

“3。 在应用程序加载事件中实例化这个公共variables

 Sub Workbook_Open() Set xlwkGSModel = ActiveWorkbook.Worksheets("gs_model") End Sub 

'现在,您可以使用xlwkGSModelvariables来引用gs_model工作表

'例如

 dim x as string x = xlwkGSModel.Cells(1,1) 

你可以,但是你真的想要更多的全局variables吗? 为什么不创build(在标准模块内)公共属性ModelWorksheet,如下所示:

 Public Property Get ModelWorksheet As Worksheet Const ModelWorksheetName As String = "gs_model" Set ModelWorksheet = ActiveWorkbook.Worksheets(ModelWorksheetName) End Property 

…那么你的代码可以做到:

 With ModelWorksheet .Cells(1,1).Value = "foo" .Font.Bold = True End With 

还要注意,你可以直接引用当前工作簿中的任何工作表,所以如果有一张名为Sheet1的工作表你可以这样做:

 With Sheet1 .Cells(1,1).Value = "foo" .Font.Bold = True End With 

这是很久以前,但比从来没有更好的迟到;-)我不知道是否在Excel 2003中工作(2007年testing):

你甚至不需要在代码中声明工作表,因为它们已经被声明了。 我正在使用德语版的Excel,我可以通过键入“Tabelle1.Cells(…)…”来访问工作表。 我认为在英文版中就像“Table1”或“Sheet1”。

您也可以更改这些名称。 在Visual Basic编辑器中查看VBA项目的Microsoft Excel对象。 (它们正好在VBA-Project视图中的模块和用户窗体之上)。 有工作表的工作表 – 对象。 select一个工作表并激活属性工具窗口。 在那里,您可以编辑工作表的名称并在代码中通过该名称访问它。

或者,如果您不想使用Excel事件,也可以公开声明您的工作表,然后创build一个子项来为其设置值。 在每个子开始处调用该子集来初始化该值。 (我是从奥威尔的回答中得到的。)


 Public WSRawData As Worksheet 

 Public Sub RawDataWSInit() Set WSRawData = Worksheets(RawData) End Sub 

 Sub Main() Call RawDataWSInit End Sub 

编辑:由Alistair敲的评论是正确的,我应该彻底读了这个问题 – 当然我的答案是无效的对象,只有像string或整数types。 对于需要创build实例的函数或子对象的对象。


是的,你可以,我最近做了。 如果将定义定义为Public ,则可以直接在其他模块中使用它们(当然,在同一个工作簿中)。

也许最好的办法是有一个单独的模块Globals并把它们放在那里。

您的工作表是在VBA-Project-Explorer中定义的“Microsoft Excel对象”:

工作表属性编辑

在上面的屏幕中,我已经命名了我的工作表DataSheet,所以现在我可以直接从代码中访问它:

 Set SomeRange = DataSheet.Range("A3:B6") 

默认情况下,您的工作表将被命名为“Sheet1”,“Sheet2”,aso …取决于您的语言。