如何在Excel的MAIN工作表中自动获取所有工作表名称(新增时自动更新)
在Excel的MAIN工作表中列出所有其他工作表名称的方法
以下是几种实用的实现方式,覆盖不同Excel版本需求:
方法一:动态数组公式(Excel 365/2021及以上)
适合需要自动刷新的场景,无需复杂操作:
- 打开MAIN工作表,选中要放置列表的起始单元格(例如A2)
- 输入以下公式并按回车,公式会自动溢出所有非MAIN的工作表名称:
=FILTER(MID(GET.WORKBOOK(1),FIND("]",GET.WORKBOOK(1))+1,255),MID(GET.WORKBOOK(1),FIND("]",GET.WORKBOOK(1))+1,255)<>"MAIN")
- 说明:
GET.WORKBOOK(1)获取所有工作表的完整标识(含工作簿名),MID提取纯工作表名称,FILTER排除MAIN工作表 - 首次输入会弹出安全提示,需启用宏表函数权限;新增/删除工作表后按F9刷新列表
方法二:VBA宏(全Excel版本通用)
适合需要完全自动化更新的场景:
基础宏(手动触发更新)
- 按下
Alt+F11打开VBA编辑器 - 右键点击左侧工程窗口中的目标工作簿,选择「插入」→「模块」
- 粘贴以下代码:
Sub ListSheetNames() Dim ws As Worksheet, mainWs As Worksheet Dim rowNum As Integer Set mainWs = ThisWorkbook.Worksheets("MAIN") '清空A列原有列表(从A2开始) mainWs.Range("A2:A" & mainWs.Cells(mainWs.Rows.Count, "A").End(xlUp).Row).ClearContents rowNum = 2 For Each ws In ThisWorkbook.Worksheets If ws.Name <> "MAIN" Then mainWs.Cells(rowNum, "A").Value = ws.Name rowNum = rowNum + 1 End If Next ws End Sub
- 回到Excel,按下
Alt+F8选择ListSheetNames并执行,即可生成列表
自动更新(工作表变动时自动刷新)
在VBA编辑器的ThisWorkbook模块中粘贴以下代码,新增/删除/切换工作表时会自动更新MAIN中的列表:
Private Sub Workbook_SheetActivate(ByVal Sh As Object) ListSheetNames End Sub Private Sub Workbook_SheetNew(ByVal Sh As Object) ListSheetNames End Sub Private Sub Workbook_SheetDelete(ByVal Sh As Object) ListSheetNames End Sub
方法三:手动快速生成(临时需求)
如果只是需要一次性生成列表:
- 右键点击任意工作表标签,选择「选定全部工作表」,然后点击MAIN标签取消选中
- 复制这些选中的工作表标签名称(右键→「复制」),粘贴到MAIN工作表的单元格中即可
内容的提问来源于stack exchange,提问作者Hellihansen
相关产品推荐
相关产品推荐

