我正在重构Excel 2003工作簿中的许多模块,并在每个模块的每个过程中声明了同一组工作表;我想在全球范围内宣布一次。我可以将工作表名称设置为文字,例如:
Public Const xlwkGSModel = "gs_model" As String
然后在程序中使用:
...ActiveWorkbook.Worksheets(xlwkGSModel).Cells(1,1)
但有没有办法声明工作表对象,以便过程中的代码可以是:
...xlwkGSModel.Cells(1,1)
答案 0 :(得分:11)
“1。插入模块
“2。在模块中声明工作表公共变量如下
Public xlwkGSModel As Worksheet
“3。在应用程序加载事件
中实例化此公共变量Sub Workbook_Open()
Set xlwkGSModel = ActiveWorkbook.Worksheets("gs_model")
End Sub
'现在您可以使用xlwkGSModel变量引用gs_model工作表
'例如
dim x as string
x = xlwkGSModel.Cells(1,1)
答案 1 :(得分:5)
这是很久以前的事了,但迟到总比没有好;-) 我不知道它是否适用于Excel 2003(使用2007测试):
您甚至不需要在代码中声明工作表,因为它们已经被声明。我正在使用德语版的Excel,我可以通过输入“Tabelle1.Cells(...)...”来访问工作表。我假设在英文版中它类似于“Table1”或“Sheet1”。
您也可以更改这些名称。在Visual Basic编辑器中,查看VBA项目的Microsoft Excel对象。 (它们位于VBA-Project视图中的Modules和UserForms之上)。有工作簿的工作表对象。选择工作表并激活“属性”工具窗口。在那里,您可以编辑工作表的名称,并在代码中通过该名称访问它。
答案 2 :(得分:4)
你可以,但你真的想要更多全局变量吗?为什么不在(在标准模块中)创建公共属性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
答案 3 :(得分:2)
或者,如果您不想使用Excel事件,您还可以公开声明工作表,然后创建一个子设置值。在每个sub的开头调用该sub来初始化该值。 (我是从奥威尔的回答中做到的。)
Public WSRawData As Worksheet
Public Sub RawDataWSInit()
Set WSRawData = Worksheets(RawData)
End Sub
Sub Main()
Call RawDataWSInit
End Sub
答案 4 :(得分:1)
您的工作表是VBA-Project-Explorer中定义的“Microsoft Excel对象”:
在上面的屏幕中,我已经命名了我的工作表数据表,所以现在我可以直接从代码中访问它:
Set SomeRange = DataSheet.Range("A3:B6")
默认情况下,您的工作表将被命名为“Sheet1”,“Sheet2”,aso ...取决于您的语言。
答案 5 :(得分:0)
编辑: Alistair Knock的评论是正确的,我应该彻底阅读这个问题 - 当然我的答案对于对象无效,只适用于字符串或整数等类型。对于对象,您需要一个创建实例的函数或子。
是的,你可以,我最近做到了。如果您将定义定义为Public
,则可以直接在其他模块中使用它们(当然,在同一工作簿中)。
也许最好的方法是拥有一个单独的模块 Globals 并将它们放在那里。