VBA从文件夹中的所有文件复制工作表并将其复制到主文件夹中

我有一个文件夹完整的多个Excel文件,所有的文件都有一个特定的表格,我需要复制到我的主人。

我需要macros来逐个打开该文件夹中的所有文件,并使用源文件名作为主工作簿中的工作表名称将特定工作表复制到主文件中。 Excel 2013。

我尝试在线search,并有以下代码:

Option Explicit Sub test() Dim wkbDest As Workbook Dim wksDest As Worksheet Dim wkbSource As Workbook Dim wksSource As Worksheet Dim MyPath As String Dim MyFile As String Application.ScreenUpdating = False Set wkbDest = ThisWorkbook Set wksDest = wkbDest.Worksheets("Sheet1") 'change the destination sheet name accordingly MyPath = "H:\Cutover\" If Right(MyPath, 1) <> "\" Then MyPath = MyPath & "\" MyFile = Dir(MyPath & "*.xls") Do While Len(MyFile) > 0 Set wkbSource = Workbooks.Open(MyPath & MyFile) Set wksSource = wkbSource.Worksheets("Sheet1") 'change the source sheet name accordingly 'Your copy/paste code here (((((need help here please)))))))) wkbSource.Close savechanges:=False MyFile = Dir Loop Application.ScreenUpdating = True MsgBox "Completed...", vbInformation End Sub 

编辑:

所以我设法到了下面,但它仍然不能正常工作。 它不会将表格重命名为源文件名。 有人可以帮忙吗?

选项显式

小测()

 Dim wkbDest As Workbook Dim wksDest As Worksheet Dim wkbSource As Workbook Dim wksSource As Worksheet Dim MyPath As String Dim MyFile As String Application.ScreenUpdating = False Set wkbDest = ThisWorkbook Set wksDest = wkbDest.Worksheets("Sheet1") 'change the destination sheet name accordingly MyPath = "H:\Cutover\" If Right(MyPath, 1) <> "\" Then MyPath = MyPath & "\" MyFile = Dir(MyPath & "*.xlsx") Do While Len(MyFile) > 0 Set wkbSource = Workbooks.Open(MyPath & MyFile) Set wksSource = wkbSource.Worksheets("Sheet1") 'change the source sheet name accordingly Sheets("SheetToCopy").Copy Before:=Workbooks("WorkbookToPasteIn").Sheets(SheetIndex) wkbSource.Close savechanges:=False MyFile = Dir Loop Application.ScreenUpdating = True MsgBox "Completed...", vbInformation 

结束小组

所以您需要帮助的部分是如何将工作表中的一个范围复制/粘贴到一个文件中的目标文件中的常用工作表?

设置一个variables来跟踪目标工作表中最后一个空行

请查看如何确定每个源表单中最后一行的内容,select该源范围,将其复制到剪贴板中,然后将其粘贴到目标工作表的最后一个空行,并将目标variables重置为新的第一个空白在目标工作表中排


另一种方法是打开一个输出CSV文件,并parsing每一行,并build立一个string,并将其写入文件,而不closures输出CSV文件,直到循环结束


如果文件太大,使用VB.NET会更好,因为处理大文件的速度要快得多


您也可以将每个文件/行读取到内存数据表中,然后将数据表输出到CSV文件或目标Excel文件

你更喜欢哪种方法?

您可以简单地在新的工作簿中复制工作表,按照以下代码:

Sheets("SheetToCopy").Copy Before:=Workbooks("WorkbookToPasteIn").Sheets(SheetIndex)

然后,重新命名该表以适应您的手段。