HOWTO · VBA
如何在 VBA 中激活 Excel 工作表
本文帮助您了解如何使用 VBA 在 Excel 中激活工作表。学习各种方法,包括按名称、索引和变量激活。凭借实用的示例和清晰的说明,本指南将提升您的 Excel 技能并简化您的工作流程。
本页内容
若要在 Excel VBA 中使工作表成为当前工作表,请调用它的 Activate 方法。例如,Worksheets("Sheet2").Activate 会选取名为 Sheet2 的工作表。当代码只需要读取或更改单元格时,直接引用工作表而不更改活动工作表通常更清楚。
按名称激活工作表
在 Worksheets 集合中使用工作表的选项卡名称。一个最精简的 VBA 过程是 Sub ShowSummary(): Worksheets("Summary").Activate: End Sub。请将 Summary 替换为确切的选项卡名称,包括空格。此集合中的名称是可见的工作表名称,而不是工作表的 VBA 代码名称。成员名称是 Activate,而用于工作表引用的对象类型是 Worksheet。
这个小型 Python 模型演示了如何按选项卡名称查找工作表并读取单元格的值:
worksheets = {
"Summary": {"A1": "Ready"},
"Archive": {"A1": "Saved"},
}
selected = worksheets["Summary"]
print(selected["A1"])
Ready
该模型说明了按名称选择的方式;在 Excel VBA 中,请使用上方的 Worksheets("Summary").Activate 语句。工作簿中必须包含具有该确切选项卡名称的工作表。
当目标可能不属于包含宏的工作簿时,请用工作簿限定集合:Workbooks("Reports.xlsx").Worksheets("Summary").Activate。工作簿必须已打开,且其名称必须与打开的工作簿一致。这比依赖恰好处于活动状态的任何工作簿更清楚。
按索引激活工作表
工作表也可以按其位置选择:Worksheets(2).Activate。索引从一开始,因此 Worksheets(1) 指的是该工作簿 Worksheets 集合中的第一个工作表。索引在按顺序处理工作表时很有用,但在插入、删除或移动工作表之后,索引可能会指向不同的工作表。当工作表的身份比其位置更重要时,请使用名称。
用 ActiveSheet 引用活动工作表
ActiveSheet 指的是当前在 Excel 中选中的工作表。例如,ActiveSheet.Range("A1").Value = "Ready" 会向该工作表的单元格 A1 写入内容。未限定的 Range("A1") 在工作表上下文中也会使用活动工作表,因此它取决于 Excel 当前的选择。这种依赖关系可能会在其他操作更改活动工作表时,使过程影响到错误的工作表。当目标已知时,请优先使用明确的工作表引用。
激活工作表会更改 Excel 的可见选择;它并非只是编辑该工作表所必需的。像 Worksheets("Summary").Range("A1").Value = "Ready" 这样的直接引用会明确指出目标。
使用工作表变量
Worksheet 变量会保留对特定工作表的引用,让后续语句可以重复使用它。声明变量、用 Set 分配对象,然后调用 Activate 或操作它的单元格。例如,该过程的语句为 Dim ws As Worksheet、Set ws = ThisWorkbook.Worksheets("Summary") 和 ws.Activate。ThisWorkbook 表示包含 VBA 代码的工作簿;当目标是另一个打开的工作簿时,请使用 Workbooks("Reports.xlsx") 引用。
在分配 ws 之后,单元格操作可以使用 ws.Range("A1").Value = "Ready",而无需激活工作表。这样即使使用者更改所选工作表,目标仍然明确。
在循环中激活工作表
当任务确实需要每个工作表依次变为可见时,请迭代 Worksheets 集合。VBA 循环可以写成 Dim ws As Worksheet,接着是 For Each ws In ThisWorkbook.Worksheets、ws.Activate 和 Next ws。请将需要活动工作表的动作放在循环内。Worksheets 不包含图表工作表;Sheets 则同时包含工作表和图表工作表,因此仅处理工作表时请使用前者。
对于大多数重复的单元格操作,激活是不必要的:请改为在循环内放入像 ws.Range("A1").Value = "Ready" 这样的直接操作。这样可避免依赖活动选择,并让每个目标都清楚明确。
处理常见的激活错误和限制
名称或索引必须标识指定工作簿中的工作表。名称拼写错误或缺失、工作簿已关闭,或索引超出范围,都会使 VBA 报告运行时错误。请检查工作簿和选项卡名称,并在激活之前确认目标存在。
隐藏的工作表在保持隐藏状态时无法激活。请先让它变为可见,例如使用 Worksheets("Summary").Visible = xlSheetVisible,然后在用户需要看到它时将其激活。深度隐藏的工作表也必须先从 VBA 或 Visual Basic 编辑器更改其可见性,才能激活。
Excel 在活动工作簿内一次只有一个活动工作表。工作簿可以包含许多工作表,但激活另一个工作表会取代当前的活动工作表。如果目标是更新多个工作表,请在循环中逐一处理工作表引用并直接对每个工作表进行操作,而不是试图让多个工作表同时保持活动状态。