代码逻辑如下:
Sub 合并工作薄() On Error Resume Next Dim SummarySheet As Worksheet '汇总表 Dim SelectedFiles() As Variant '选择的文件集合 Dim Nrow As Long Dim FileName As String Dim NFile As Long Dim WorkBk As Workbook Dim SourceRange As Range Dim DestRange As Range Set SummarySheet = ThisWorkbook.Worksheets(1) SelectedFiles = Application.GetOpenFilename(filefilter:="Excel 文件(*.xl*),*.xl*", MultiSelect:=True) Nrow = 1 For NFile = LBound(SelectedFiles) To UBound(SelectedFiles) FileName = SelectedFiles(NFile) Set WorkBk = Workbooks.Open(FileName) Set SourceRange = WorkBk.Worksheets(1).UsedRange Set DestRange = SummarySheet.Range("A" & Nrow) Set DestRange = DestRange.Resize(SourceRange.Rows.Count, SourceRange.Columns.Count) DestRange.Value = SourceRange.Value Nrow = Nrow + DestRange.Rows.Count WorkBk.Close savechanges:=False Next SummarySheet.Columns.AutoFit End Sub
说明:这里是分别复制给子工作簿/工作表的值,而没有复制格式,如果需要特殊格式的,可以现在汇总表中进行格式设置,再执行合并动作。
运行宏代码,选择工作表: