EP03. “Loop through Books and Sheets 循环遍历工作簿和工作表”
🔒 登录后可标记已读- 这篇教你用双层循环,遍历目前打开的所有工作簿
- 同时列出每个工作簿里的所有工作表名称
- 结果通通拼成一段文字,显示在一个消息框里
- 前置知识是 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(工作表)、以及用来拼接结果文字的字符串textFor Each book In Workbooks:外层循环,遍历目前所有打开的工作簿text = text & "Workbook: " & book.Name & vbNewLine & ...:用&把文字片段串接起来,vbNewLine代表换行For Each sheet In book.Worksheets:内层循环,遍历当前这个工作簿里的所有工作表MsgBox text:循环结束后,一次性把拼好的完整文字显示出来
代码怎么运行
Alt + F11打开 VBA 编辑器,Insert → Module,贴入代码- 打开几份不同的工作簿(每份工作簿也可以有多个工作表)
- 回到任一工作表放命令按钮,绑定这个 Sub
- 点击按钮,弹窗会列出所有打开的工作簿名称,以及各自底下的工作表名称
[截图:点击按钮后弹出的 MsgBox,多行文字列出每个打开中的工作簿名称,以及各自底下的工作表名称清单]
学完你会
- ✅ 能用 For Each 双层循环遍历所有打开的工作簿和其工作表
- ✅ 能用
&和vbNewLine把多层循环的结果拼成一段文字显示 - ✅ 分得清外层/内层循环变量各自代表什么,
Next的嵌套顺序不会写反
常见错误
- 忘记在内层循环前后正确嵌套
Next sheet/Next book,两层循环的结束顺序写反会报错 text变量没有初始化直接开始拼接,其实 VBA 的字符串变量默认值就是空字符串,可以直接用,但如果循环内忘记清空、多次调用同一个 Sub 会导致内容越叠越长(这里因为是本地变量、每次调用重新声明所以不会有这个问题,但用模块级变量时要注意)
Sources
Blog / Website: