2017-06-07 80 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

相關問題