EP06. “Import Sheets 汇入其他文件的工作表”
🔒 登录后可标记已读- 接续 EP05 遍历目录的技巧,这篇更进一步
- 把资料夹里每个 Excel 文件的所有工作表,直接复制汇入到当前工作簿
- 等于把好几份文件的数据合并成一份
- 前置知识是 EP05 的 Dir 循环写法
- 学完能处理"把多个部门/多个月份报表合并成一份总表"这类常见需求
重点内容
适用版本
桌面版通用(Excel 365 / 2021 / 2019 等)。
事前准备
下载 Book4.xlsx、Book5.xlsx 放进 C:\test\ 资料夹。
完整代码
Sub Import_Sheets()
' 第1步:声明变量,第2步:关闭屏幕更新和警告提示
Dim directory As String, fileName As String, sheet As Worksheet, total As Integer
Application.ScreenUpdating = False
Application.DisplayAlerts = False
' 第3步:初始化目录,第4步:建立循环
directory = "c:\test\"
fileName = Dir(directory & "\*.xl??")
Do While fileName <> ""
' 第5步:打开文件
Workbooks.Open (directory & fileName)
' 第6-8步:把这个文件的每张工作表都复制到当前工作簿末尾
For Each sheet In Workbooks(fileName).Worksheets
total = Workbooks("import-sheets.xlsm").Worksheets.count
Workbooks(fileName).Worksheets(sheet.Name).Copy _
after:=Workbooks("import-sheets.xlsm").Worksheets(total)
Next sheet
' 关闭这个文件,继续下一个
Workbooks(fileName).Close
fileName = Dir()
Loop
' 第9步:恢复屏幕更新和警告提示
Application.ScreenUpdating = True
Application.DisplayAlerts = True
End Sub
代码逻辑说明
Application.DisplayAlerts = False:关闭 Excel 的确认提示框(比如覆盖同名工作表时的警告),避免程序运行时卡在弹窗上;处理完记得改回 Truetotal = Workbooks("import-sheets.xlsm").Worksheets.count:先算出当前工作簿目前有几张工作表,作为等下插入位置的依据.Copy after:=Workbooks("import-sheets.xlsm").Worksheets(total):用Copy方法把来源工作表复制到当前工作簿"最后一张工作表之后",也就是每次都插到最末尾- 用
_(续行符号)把一行太长的代码拆成两行写,属于纯排版用途,不影响逻辑
代码怎么运行
Alt + F11打开 VBA 编辑器,Insert → Module,贴入代码- 把当前工作簿另存为
import-sheets.xlsm - 回到工作表放命令按钮,绑定
Import_Sheets - 点击按钮,
C:\test\里每个 Excel 文件的所有工作表都会被复制进当前工作簿
[截图:宏运行完成后,工作簿底部的工作表标签栏多出好几个从其他文件汇入的工作表分页]
学完你会
- ✅ 能把资料夹里多个 Excel 文件的工作表,批次复制汇入到当前工作簿
- ✅ 知道
Application.DisplayAlerts要记得关、也要记得改回,避免误触警告或漏看提示 - ✅ 能判断同名工作表汇入时会怎么处理(自动改名,不会自动合并内容)
常见错误
- 如果来源文件里有跟当前工作簿"同名"的工作表,
Copy会产生类似 "Book4 (2)" 的重复命名,不会自动合并内容,只是排在旁边 - 忘记把
Application.DisplayAlerts设回 True,会导致后续手动操作 Excel 时该有的确认提示都不会出现,容易误删数据不自知 - 代码里同样写死了
"import-sheets.xlsm"这个文件名,另存成别的名字要记得同步修改
Sources
Blog / Website: