2015-08-17 3 views
3

В строка B У меня есть список кодов и в H2 У меня есть путь к папке, который содержит все файлы для этих кодов.Loop Through Files

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

Может кто-нибудь рассказать мне, как исправить это?

Sub Master_Recipe() 

Dim MainLoop As Integer 
Dim WB As Workbook 
Dim WBmain As Workbook 
Dim Fac As Integer 

MainLoop = 2 
Set WBmain = ActiveWorkbook 

    Do While MainLoop < 15 
     Fac = Range("B" & MainLoop).Value 
     Set WB = Range("H2").Value & Fac & " - Recipe Book" 'Object required error here 

     Workbooks(WB).Activate 
      Range("C:G").Copy 

     Workbooks("WBmain").Activate 
     Worksheets("Fac").Activate 
      Range("C:G").Paste 

     MainLoop = MainLoop + 1 
    Loop 

End Sub 
+0

«set WB = range (« H2 »). Значение« Я получаю ошибку, требуемую объектом –

+0

Я вернул предыдущее редактирование, потому что вы не должны менять свой код после его публикации. Если вы решили свой вопрос с помощью другой структуры кода, напишите это как ответ и примите этот ответ с помощью зеленой галочки.Если у вас возник новый вопрос из-за существенных изменений в вашем коде, задайте этот вопрос отдельно от этого вопроса. Для уточнения используйте комментарии. – Chrismas007

ответ

4

Существует немало проблем для решения (поэтому я буду обновлять ответ, поскольку вы даете разъяснения).

Range без определенного листа ОЧЕНЬ плохая практика.

Sub Master_Recipe() 

Dim MainLoop As Integer 
Dim WB As Workbook 
Dim WBmain As Workbook 
Dim Fac As Integer 

Set WBmain = Application.Workbooks.Open("WBmain") 

    For MainLoop = 2 to 14 
     Fac = WBMain.Sheets("NAME OF SHEET with Data").Range("B" & MainLoop).Value 
     Set WB = Application.Workbooks.Open(WBMain.Sheets("NAME OF SHEET with Data").Range("H2").Value & Fac & " - Recipe Book") 

     WB.Sheets("Name of sheet in workbook").Range("C:G").Copy 
     WBMain.Sheets("Fac").Range("C:G").Paste 

    Next MainLoop 

End Sub 
+0

Спасибо, Крис, я все еще получаю ошибку «Sub или Function not defined» в «Set WBmain = Workbook (« WBmain »)» –

+0

@OriMeir Очистил код, чтобы правильно хранить книгу в переменной – Chrismas007

2

Проблема заключается в линии вы сказали:

Set WB = Range("H2").Value & Fac & " - Recipe Book" 

WB объявлен в книге, но вы пытаетесь сделать его равным строке.

Что вы хотите:

Set WB = Application.Workbooks.Open(Range("H2").Value & Fac & " - Recipe Book") 

при условии, что созданная строка содержит полный путь к файлу.

Если вы сделаете это, вы будете иметь проблемы с этой линии:

Workbooks(WB).Activate 

Это потому, что WB объявлен как книги, но вы пытаетесь использовать его в качестве sttring. Вам нужно сделать что-либо:

WB.Activate 

или

Workbooks(Wb.Name).Activate 

Я думаю, что вы хотели об объявлении ББ в виде строки, в этом случае единственное изменение, которое нужно:

Dim WB As String 

предполагающей файл уже открыт.

**** EDIT ****

Если вы сделаете это, вы должны избавиться от "Установить" ключевое слово, так что линия должна быть:

WB = Range("H2").Value & Fac & " - Recipe Book" 
+3

Сделайте это, укажите диапазон листов, как указано в Chrismas007. –

+0

Согласовано. Я не смотрел на эту часть. Посмотрите на Chrismas007s ответ, чтобы исправить эту проблему, поскольку у вас могут возникнуть проблемы при попытке скопировать/вставить. – OpiesDad

+0

@DavidG Я сделал несколько исправлений, учитывая ваш совет. Тем не менее, я все еще получаю ошибки в строке Set WB. (Object Required). Вы видите, почему? » –

1

Вы пытаясь установить строку в качестве объекта рабочей книги, именно поэтому у вас есть ошибка:

Я добавил переменный Темп, чтобы показать вам, где проблема приходит из:

Sub Master_Recipe() 

Dim MainLoop As Integer, _ 
    WB As Workbook, _ 
    WBmain As Workbook, _ 
    Fac As Integer, _ 
    TpStrWb As String 

MainLoop = 2 
Set WBmain = ActiveWorkbook 

    Do While MainLoop < 15 
     Fac = WBmain.Sheets("Fac").Range("B" & MainLoop).Value 
     '---------Changes here------------- 
     TpStrWb = WBmain.Sheets("Fac").Range("H2").Value & Fac & " - Recipe Book" 
     Set WB = Workbooks.Open(TpStrWb) 
     '---------Changes here------------- 

     WB.Range("C:G").Copy 

     WBmain.Sheets("Fac").Range("C1").Paste 

     MainLoop = MainLoop + 1 
    Loop 

End Sub