2016-01-15 2 views
0

Я пытаюсь вытащить одну вкладку в основную книгу из нескольких книг в указанной папке. до сих пор это то, что у меня есть:Как скопировать одну вкладку из книги в основную книгу с помощью VBA на excel

Sub GetSheets() 
Path = "D:\APQP\APQP\Open Projects\" 
Filename = Dir(Path & "*.xlsx") 
    Do While Filename <> "" 
    Workbooks.Open Filename:=Path & Filename, ReadOnly:=True 
    For Each Sheet In ActiveWorkbook.Sheets 
    Sheets("5-Phase").Select 
    Sheets("5-Phase").Copy Before:=ThisWorkbook.Sheets(1) 
    Next 
    Workbooks(Filename).Close 
    Filename = Dir() 
    Loop 
End Sub 

Прямо сейчас, когда я запускаю его, он заполнит мастер книги с 50 из вкладок с первого wookbook в папке вместо справляясь вкладку и перейти к следующему рабочей книги и справиться с этой вкладкой в ​​этой книге. Любая помощь будет большой.

+0

Ваш «For Each» захватит каждый лист в книге, вы открываете, а затем скопировать 5-фазный, так это копирование 5-фазы для каждого листа в каждой книге. Удалите цикл «For», и это должно решить проблему. – PKatona

ответ

2

У вас есть две основные проблемы с вашим кодом. Цикл For не нужен, и вы не работаете с открытой книгой. Нечто подобное должно работать для вас:

Sub GetSheets() 

    Dim wb As Workbook 
    Dim sPath As String 
    Dim sFileName As String 

    Set wb = ThisWorkbook 
    sPath = "D:\APQP\APQP\Open Projects\" 
    sFileName = Dir(sPath & "*.xlsx") 

    Application.ScreenUpdating = False 
    Application.EnableEvents = False 

    On Error Resume Next 
    Do While Len(sFileName) > 0 
     With Workbooks.Open(sPath & sFileName, ReadOnly:=True) 
      .Sheets("5-Phase").Copy Before:=wb.Sheets(1) 
      .Close False 
     End With 
     sFileName = Dir() 
    Loop 
    On Error GoTo 0 

    Application.ScreenUpdating = True 
    Application.EnableEvents = True 

End Sub 
+0

Perfect! Спасибо за помощь, это сработало сперва. –

+0

@KevinSchneider, пожалуйста, примите этот ответ, чтобы помочь другим пользователям SO. – Fadi

Смежные вопросы