Ali*_*ock 7 excel vba excel-vba
我正在重构Excel 2003工作簿中的许多模块,并在每个模块的每个过程中声明相同的工作表集; 我想在全球范围内宣布一次.我可以将工作表名称设置为文字,例如:
Public Const xlwkGSModel = "gs_model" As String
Run Code Online (Sandbox Code Playgroud)
然后在程序中使用:
...ActiveWorkbook.Worksheets(xlwkGSModel).Cells(1,1)
Run Code Online (Sandbox Code Playgroud)
但有没有办法声明工作表对象,以便过程中的代码可以是:
...xlwkGSModel.Cells(1,1)
Run Code Online (Sandbox Code Playgroud)
小智 11
"1.插入模块
"2.在模块中声明工作表公共变量,如下所示
Public xlwkGSModel As Worksheet
Run Code Online (Sandbox Code Playgroud)
"3.在应用程序加载事件中实例化此公共变量
Sub Workbook_Open()
Set xlwkGSModel = ActiveWorkbook.Worksheets("gs_model")
End Sub
Run Code Online (Sandbox Code Playgroud)
'现在,您可以使用xlwkGSModel变量引用gs_model工作表
'例如
dim x as string
x = xlwkGSModel.Cells(1,1)
Run Code Online (Sandbox Code Playgroud)
你可以,但是你真的想要更多的全局变量吗?为什么不创建(在标准模块内)公共属性 ModelWorksheet,如下所示:
Public Property Get ModelWorksheet As Worksheet
Const ModelWorksheetName As String = "gs_model"
Set ModelWorksheet = ActiveWorkbook.Worksheets(ModelWorksheetName)
End Property
Run Code Online (Sandbox Code Playgroud)
...那么你的代码可以执行以下操作:
With ModelWorksheet
.Cells(1,1).Value = "foo"
.Font.Bold = True
End With
Run Code Online (Sandbox Code Playgroud)
另请注意,您可以直接引用当前工作簿中的任何工作表,因此如果有一个名为 Sheet1 的工作表,您可以执行以下操作:
With Sheet1
.Cells(1,1).Value = "foo"
.Font.Bold = True
End With
Run Code Online (Sandbox Code Playgroud)
小智 5
这是很久以前的事了,但迟到总比没有好;-)我不知道这是否适用于Excel 2003(用2007测试):
您甚至不需要在代码中声明工作表,因为它们已经被声明.我正在使用德语版的Excel,我可以通过输入"Tabelle1.Cells(...)..."来访问工作表.我假设在英文版中它类似于"Table1"或"Sheet1".
您也可以更改这些名称.在Visual Basic编辑器中,查看VBA项目的Microsoft Excel对象.(它们位于VBA-Project视图中的Modules和UserForms之上).有工作簿的工作表对象.选择工作表并激活"属性"工具窗口.在那里,您可以编辑工作表的名称,并在代码中通过该名称访问它.