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

时间:2017-06-07 21:37:58

标签: excel vba excel-vba

我有一个包含多个excel文件的文件夹,所有文件都有一个特定的工作表,我需要复制到我的主文件中。

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

我尝试在线搜索并拥有以下代码:

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

End Sub

2 个答案:

答案 0 :(得分:0)

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

设置变量以跟踪目标表单中的最后一个空行

查找如何确定每个源表中最后一行的内容,选择该源范围,将其复制到剪贴板,然后将其粘贴到目标表中的最后一个空行,并将目标变量重置为目标表中新的第一个空白行

另一种方法是打开输出CSV文件,解析每一行并构建一个字符串并将其写入文件,而不关闭输出CSV文件,直到循环结束

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

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

您更喜欢哪种方法?

答案 1 :(得分:0)

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

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

然后,重命名工作表以适合您的方式。