我想知道 Excel 中是否有任何工作表指示器。假设我有 VBA 代码,该代码在某个时候使用工作表名称,然后我更改了工作表的名称,因此我也需要在代码中更改此名称。有没有办法使用工作表指示器,这样我就不必在代码中更改此名称?或者有没有其他方法可以在代码中使用工作表而不使用其名称?
感谢您的帮助。
答案1
根据具体情况,您有几种选择。
1. 使用常量
您可以在代码顶部声明一个常量,然后只需对该常量进行更改即可影响使用该常量的每个点。而不是使用:
Set shtSheet = sheets("Sheet1")
您可以使用:
Set shtSheet = Sheets(csSource)
自始至终。
使用声明常量Const <name> as <type> = <value>
Sub WorksheetVar()
Const csSheetName As String = "Test"
Sheets(csSheetName).Range("A1").Value = 1
Sheets(csSheetName).Range("A2").Value = 2
Sheets(csSheetName).Range("A3").Value = 3
End Sub
它并不能避免在代码中设置值,但是它确实允许您更轻松地更新它,而不是在代码中搜索所有使用该名称的地方。
2. 使用索引号
每个工作表都有一个编号和一个名称,通常是工作表在标签中的位置。即使工作表名称发生变化,该名称仍将保持不变,但如果标签顺序发生变化,该名称将发生变化。
3.使用变量
您可以从单元格、另一个宏、输入框等中获取变量。您可以使用它将工作表的名称传递给您的代码。
4. 使用工作表的对象名称
与工作表的显示名称无关,每个工作表都有一个对象名称,通常是首次创建时的名称。如果您查看左侧的项目资源管理器,您会看到每个工作表都列为“Sheet1 (Sheet1)”之类的名称。如果您将 Sheet1 的名称更改为 Test,您将看到Sheet1 (Test)
。您可以使用该不变的对象名称根据需要引用工作表,就像它是一个变量一样。
Sub Sheetname()
Sheet1.Range("A1").Value = 1
Sheet1.Range("A2").Value = 2
End Sub
我个人不喜欢这种方法,因为很容易混淆哪张纸是哪张,但这对你来说肯定是一种选择。