Excel 合并当前目录下所有工作簿的全部工作表的VBA代码

本代码源自网络,不知作者是谁。我在分析完代码后,添加了注释,并修改了BUG。分享给大家,希望对大家有用。直接复制就可以运行了。

'#######################################################################################################
'使用说明:
'本代码涉及的文件有两类,一类是被合并的Excel文件,A1,A2...An可能有很多个;
'一类是合并后的文件B,只有一个,建议直接在目录下新建一个Excel文件操作合并;
'需要合并的文件和合并后的文件需要放置到同一个文件夹下;
'代码默认只能批量合并.xls格式文件,可以在第二行注释修改文件格式以合并xlsx格式Excel文件;
'代码批量将需要合并的Excel文件的各个sheet页一次性合并到执行代码的Excel文档的sheet页;
'如果当前执行代码的文件格式为xlsx格式,第七行注释下面的那一行的代码的A65536需要改成A1048576;
'#######################################################################################################

Sub 合并当前目录下所有工作簿的全部工作表()
Dim MyPath, MyName, AWbName                 '第一行注释,声明变量
Dim Wb As Workbook, WbN As String
Dim G As Long
Dim Num As Long
Dim BOX As String
Application.ScreenUpdating = False			'第二行注释,关闭实时显示执行效果
    MyPath = ActiveWorkbook.Path
    MyName = Dir(MyPath & "\" & "*.xls")    '第三行注释,遍历目录下全部格式为xls的Excel文件,如果Excel文件格式为xlsx,此处要将xls改成xlsx
    AWbName = ActiveWorkbook.Name           '第四行注释,保存当前Excel文件的文件名
    Num = 0
    Do While MyName <> ""
        If MyName <> AWbName Then
            Set Wb = Workbooks.Open(MyPath & "\" & MyName)
                Num = Num + 1   			'第五行注释,记录合并的Excel文件数量
            With Workbooks(1).ActiveSheet   '第六行注释,当前Excel工作簿的第一个sheet页
                For G = 1 To Wb.Sheets.Count
			'第七行注释,复制打开的Excel文件的sheet页到当前Excel文件,如果当前Excel文档为xlsx格式,此处需要将A65536改成A1048576
                    Wb.Sheets(G).UsedRange.Copy .Cells(.Range("A65536").End(xlUp).Row + 1, 1)
                Next
                WbN = WbN & Chr(13) & Wb.Name   '第八行注释,保存已合并的Excel文件,并还货
                Wb.Close SaveChanges:=False     '第九行注释,关闭打开的Excel文件并不保存,也可以写成:Wb.Close False或Wb.Close(False)
            End With
        End If
        MyName = Dir    '第十行注释,继续查找下一个满足条件的文件,再次调用dir函数时,不需要提供pathname参数和attributes参数
                        '第十一行注释,循环调用,直到返回的值为空时,表示没有再满足条件的文件存在。
    Loop
Range("A1").Select		'第十二行注释,执行完sheet页复制后,光标落在A1单元格
Application.ScreenUpdating = True
MsgBox "共合并了" & Num & "个工作薄下的全部工作表。如下:" & Chr(13) & WbN, vbInformation, "提示"
End Sub


 

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值