Microsoft Lab
全部软件
Excel工作簿与工作表对象(Workbook and Worksheet Object)约 5 分钟

Loop through Books and Sheets 循环遍历工作簿和工作表

重点内容


适用版本

桌面版通用(Excel 365 / 2021 / 2019 等)。


完整代码

Sub Loop_Through_Books_And_Sheets()
    Dim book As Workbook, sheet As Worksheet, text As String

    For Each book In Workbooks
        text = text & "Workbook: " & book.Name & vbNewLine & "Worksheets: " & vbNewLine

        For Each sheet In book.Worksheets
            text = text & sheet.Name & vbNewLine
        Next sheet

        text = text & vbNewLine
    Next book

    MsgBox text
End Sub

代码逻辑说明

  • Dim book As Workbook, sheet As Worksheet, text As String:声明外层循环变量 book(工作簿)、内层循环变量 sheet(工作表)、以及用来拼接结果文字的字符串 text
  • For Each book In Workbooks:外层循环,遍历目前所有打开的工作簿
  • text = text & "Workbook: " & book.Name & vbNewLine & ...:用 & 把文字片段串接起来,vbNewLine 代表换行
  • For Each sheet In book.Worksheets:内层循环,遍历当前这个工作簿里的所有工作表
  • MsgBox text:循环结束后,一次性把拼好的完整文字显示出来

代码怎么运行

  1. Alt+F11 打开 VBA 编辑器,Insert›Module,贴入代码
  2. 打开几份不同的工作簿(每份工作簿也可以有多个工作表)
  3. 回到任一工作表放命令按钮,绑定这个 Sub
  4. 点击按钮,弹窗会列出所有打开的工作簿名称,以及各自底下的工作表名称
📷 画面提示

点击按钮后弹出的 MsgBox,多行文字列出每个打开中的工作簿名称,以及各自底下的工作表名称清单


学完你会

常见错误

  • 忘记在内层循环前后正确嵌套 Next sheet / Next book,两层循环的结束顺序写反会报错
  • text 变量没有初始化直接开始拼接,其实 VBA 的字符串变量默认值就是空字符串,可以直接用,但如果循环内忘记清空、多次调用同一个 Sub 会导致内容越叠越长(这里因为是本地变量、每次调用重新声明所以不会有这个问题,但用模块级变量时要注意)

Sources

Blog / Website:

  1. Loop through Books and Sheets
只记在你的浏览器里,换设备不会同步。