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

Import Sheets 汇入其他文件的工作表

重点内容


适用版本

桌面版通用(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 的确认提示框(比如覆盖同名工作表时的警告),避免程序运行时卡在弹窗上;处理完记得改回 True
  • total = Workbooks("import-sheets.xlsm").Worksheets.count:先算出当前工作簿目前有几张工作表,作为等下插入位置的依据
  • .Copy after:=Workbooks("import-sheets.xlsm").Worksheets(total):用 Copy 方法把来源工作表复制到当前工作簿"最后一张工作表之后",也就是每次都插到最末尾
  • 用 _(续行符号)把一行太长的代码拆成两行写,属于纯排版用途,不影响逻辑

代码怎么运行

  1. Alt+F11 打开 VBA 编辑器,Insert›Module,贴入代码
  2. 把当前工作簿另存为 import-sheets.xlsm
  3. 回到工作表放命令按钮,绑定 Import_Sheets
  4. 点击按钮,C:\test\ 里每个 Excel 文件的所有工作表都会被复制进当前工作簿
📷 画面提示

宏运行完成后,工作簿底部的工作表标签栏多出好几个从其他文件汇入的工作表分页


学完你会

常见错误

  • 如果来源文件里有跟当前工作簿"同名"的工作表,Copy 会产生类似 "Book4 (2)" 的重复命名,不会自动合并内容,只是排在旁边
  • 忘记把 Application.DisplayAlerts 设回 True,会导致后续手动操作 Excel 时该有的确认提示都不会出现,容易误删数据不自知
  • 代码里同样写死了 "import-sheets.xlsm" 这个文件名,另存成别的名字要记得同步修改

Sources

Blog / Website:

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