VBA合并当前文件夹下所有工作簿的所有工作表,但是当前工作簿的所有工作表里有合并单元格怎么合并到一张表上?
时间: 2023-12-31 18:04:44 浏览: 78
EXCEL合并当前目录下所有工作簿的全部工作表至一个表中-工具
您可以使用以下VBA代码来合并当前文件夹下所有工作簿的所有工作表,并处理合并单元格的情况:
```vba
Sub 合并工作簿工作表()
Dim MyPath As String
Dim MyFile As String
Dim WB As Workbook
Dim WS As Worksheet
Dim DestWS As Worksheet
Dim LastRow As Long
'设置合并后的目标工作表
Set DestWS = ThisWorkbook.Sheets.Add(After:= _
ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count))
DestWS.Name = "合并结果"
'获取当前文件夹路径
MyPath = ThisWorkbook.Path & "\"
'关闭屏幕更新和事件处理,加快处理速度
Application.ScreenUpdating = False
Application.EnableEvents = False
'循环遍历当前文件夹下的所有工作簿
MyFile = Dir(MyPath & "*.xlsx")
Do While MyFile <> ""
'排除当前工作簿
If MyFile <> ThisWorkbook.Name Then
'打开工作簿,合并工作表到目标工作表
Set WB = Workbooks.Open(MyPath & MyFile)
For Each WS In WB.Sheets
'复制工作表到目标工作表的下一行
WS.Copy After:=DestWS
'合并单元格处理
With DestWS.Cells(DestWS.Cells(Rows.Count, 1).End(xlUp).Row + 1, 1)
LastRow = .Row + .MergeArea.Rows.Count - 1
If .MergeCells Then
.MergeArea.Copy
.PasteSpecial xlPasteAll
Application.CutCopyMode = False
DestWS.Cells(LastRow + 1, 1).ClearFormats
End If
End With
Next WS
WB.Close False '关闭工作簿,不保存更改
End If
MyFile = Dir
Loop
'恢复屏幕更新和事件处理,并选中合并结果工作表
Application.ScreenUpdating = True
Application.EnableEvents = True
DestWS.Select
End Sub
```
请注意,此代码会在当前工作簿中创建一个名为"合并结果"的新工作表,并将所有工作簿的所有工作表合并到该工作表中。在合并过程中,它会处理合并单元格的情况,将其展开为多个单元格。
您只需将此代码复制到VBA编辑器中的模块中,并运行即可实现合并操作。在运行之前,请确保您保存了当前工作簿,并将其他要合并的工作簿放置在同一文件夹中。
希望对您有帮助!如有其他问题,请随时提问。
阅读全文