2017-06-07 83 views
1

我有一个文件夹完整的多个Excel文件,并且所有文件都有一个特定工作表,我需要将其复制到主工作表中。VBA从文件夹中的所有文件复制工作表并将其复制到主文件夹

我需要宏才能逐个打开该文件夹中的所有文件,并使用源文件名作为主工作簿中的工作表名称将特定工作表复制到主文件。 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 

末次

+0

@ dominic111你能帮忙吗? – GT0028

+0

@ a.s.h你能帮忙吗? – GT0028

回答

0

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

设置一个变量,以跟踪目标表单

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


这样做将打开输出CSV文件的另一种方式,并解析每一行并生成一个字符串并将其写入文件,而不会关闭输出CSV文件,直到循环超过


如果文件很大寿,这将是更好的使用VB.NET,而不是因为它的速度要快得多,在处理大型文件


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

您更喜欢哪种方法?

+0

这些文件并不大。最多300行,只有一张纸。我所需要的只是复制整个工作表并将其作为工作表的源文件名作为工作表名粘贴到主工作簿中。对不起VBA的新手 – GT0028

+0

@ A.S.H你能帮忙吗? – GT0028

0

你可以简单地在新的工作簿的工作表复制,下面这段代码:

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

,然后重命名表,以适应你的手段。

+0

感谢您的支持。它可以工作,但是在2个工作簿中显示“这个名字已经被使用”之后它失败了。我需要使用文件名作为工作表名称。 – GT0028

+0

然后在粘贴后立即更改名称。如果您有两次相同的工作表名称,则显然不起作用。 – dominic111

相关问题