批量合并Excel文件:同一目录下所有xls工作簿工作表

需积分: 10 5 下载量 140 浏览量 更新于2024-08-26 收藏 1KB TXT 举报
"该资源是一个VBA宏代码,用于在Excel中自动合并当前目录下所有XLS格式的工作簿的所有工作表。此代码适用于处理大量数据,尤其当工作表数量较多时,可以有效地节省手动合并的时间。它将所有工作表的数据复制到一个主工作簿中,同时在B列记录了每个来源工作簿的名称。注意,由于Excel的行限制,此代码可能无法处理超过65536行的单个工作表,这适用于Excel 2003及更早版本的xls格式文件。对于拥有更多行的新版xlsx文件,可能需要调整代码以适应更高的行数限制。" 这个VBA宏程序的核心功能是批量合并Excel工作簿。以下是对代码中关键部分的详细解释: 1. `Dim`语句:首先,定义了一些变量,如`MyPath`(当前工作簿路径)、`MyName`(目录中的文件名)、`AWbName`(活动工作簿的名字)、`Wb`(工作簿对象)、`WbNAsString`(用于存储合并工作簿名的字符串)、`G`(工作表循环计数器)、`Num`(合并的工作簿数量)和`BOXAsString`(未在代码中使用)。 2. `Application.ScreenUpdating=False`:关闭屏幕更新,以提高程序运行速度,减少屏幕闪烁。 3. `MyPath=ActiveWorkbook.Path`:获取当前活动工作簿的路径。 4. `MyName=Dir(MyPath&"\*.xls")`:使用`Dir`函数查找当前目录下所有.xls文件。 5. `DoWhileMyName<>" "`:进入循环,直到找不到更多的.xls文件。 6. `IfMyName<>AWbNameThen`:检查是否要合并当前文件(即不合并正在运行宏的工作簿)。 7. `SetWb=Workbooks.Open(MyPath&"\"&MyName)`:打开找到的每个.xls文件。 8. `Num=Num+1`:每次合并一个工作簿,就增加计数器。 9. `.Cells(.Range("B65536").End(xlUp).Row+2,1)=Left(MyName,Len(MyName)-4)`:在主工作簿的B列记录源文件名。 10. `ForG=1ToSheets.Count`:遍历工作簿中的每个工作表。 11. `Wb.Sheets(G).UsedRange.Copy Cells(.Range("B65536").End(xlUp).Row+1,1)`:复制工作表的数据并粘贴到主工作簿的下一个空白行。 12. `WbN=WbN&Chr(13)&Wb.Name`:将工作簿名添加到字符串`WbN`,用于最后的消息框显示。 13. `Wb.Close False`:关闭工作簿,但不保存更改。 14. `MyName=Dir`:查找下一个.xls文件。 15. 循环结束后,`Application.ScreenUpdating=True`恢复屏幕更新。 16. `MsgBox`:弹出消息框,显示已合并的工作簿数量和具体的工作簿名。 通过运行这个宏,用户可以在无需手动操作的情况下,快速将目录下的所有Excel工作簿合并到一起,大大提高了工作效率。