vba 快速合并当前文件夹内多个excel的指定工作表到同一个excel的同名工作表并打开,避免内容为空及1004的运行错误
时间: 2024-03-06 16:49:04 浏览: 78
以下是 VBA 代码实现该功能:
Sub MergeSheets()
Dim Path As String
Dim Filename As String
Dim wb As Workbook
Dim ws As Worksheet
Dim TargetWorkbook As Workbook
Dim TargetWorksheet As Worksheet
'设置当前文件夹路径
Path = ThisWorkbook.Path & "\"
'循环当前文件夹内的所有文件
Filename = Dir(Path & "*.xlsx")
Do While Filename <> ""
'打开当前文件
Set wb = Workbooks.Open(Path & Filename)
'循环当前文件的所有工作表
For Each ws In wb.Worksheets
'仅处理指定的工作表,比如 Sheet1 和 Sheet2
If ws.Name = "Sheet1" Or ws.Name = "Sheet2" Then
'如果目标工作簿还未打开,则打开它
If TargetWorkbook Is Nothing Then
Set TargetWorkbook = Workbooks.Open(Path & "Target.xlsx")
End If
'如果目标工作表还未存在,则创建它
On Error Resume Next
Set TargetWorksheet = TargetWorkbook.Worksheets(ws.Name)
If Err.Number <> 0 Then
Set TargetWorksheet = TargetWorkbook.Worksheets.Add
TargetWorksheet.Name = ws.Name
End If
On Error GoTo 0
'复制当前工作表到目标工作表
ws.UsedRange.Copy TargetWorksheet.Range("A1")
End If
Next ws
'关闭当前文件
wb.Close False
'准备处理下一个文件
Filename = Dir
Loop
'激活目标工作簿的第一个工作表
TargetWorkbook.Worksheets(1).Activate
'弹出消息框提示完成
MsgBox "合并完成!"
End Sub
需要注意以下几点:
- 代码中假设当前文件夹为 VBA 代码所在的文件夹,如果需要修改,可以修改代码中的
Path
变量。 - 代码中假设目标工作簿为当前文件夹下的
Target.xlsx
文件,如果需要修改,可以修改代码中的文件名。 - 代码中仅处理指定的工作表,比如 Sheet1 和 Sheet2,如果需要处理更多工作表,可以在代码中添加相应的判断和处理逻辑。
- 在复制工作表时,需要注意目标工作表的格式和样式,以避免出现内容为空或 1004 运行错误。
相关推荐















