MICROSOFT

EP03. “Loop through Books and Sheets 循环遍历工作簿和工作表”

首页 Microsoft 工具 Excel · VBA · Workbook and Worksheet Object · EP03
约 5 分钟· #EP03#Excel#Workbook and Worksheet Object
🔒 登录后可标记已读
  • 这篇教你用双层循环,遍历目前打开的所有工作簿
  • 同时列出每个工作簿里的所有工作表名称
  • 结果通通拼成一段文字,显示在一个消息框里
  • 前置知识是 For Each 循环和对象变量(Workbook / Worksheet)的基本用法
  • 学完能理解怎么"遍历"多层级的 Excel 对象结构

重点内容


适用版本

桌面版通用(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,多行文字列出每个打开中的工作簿名称,以及各自底下的工作表名称清单]


学完你会

  • ✅ 能用 For Each 双层循环遍历所有打开的工作簿和其工作表
  • ✅ 能用 &vbNewLine 把多层循环的结果拼成一段文字显示
  • ✅ 分得清外层/内层循环变量各自代表什么,Next 的嵌套顺序不会写反

常见错误

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

Sources

Blog / Website:

  1. Loop through Books and Sheets