通过文件循环

在行BI有一个代码列表,H2中我有一个文件夹path ,其中包含这些列出的代码的所有文件。

我试图循环访问这个列表,激活相应的文件,将这些值复制并粘贴到原始文件中相应的选项卡中。 虽然我似乎无法得到这个代码工作。

有人可以告诉我如何解决它?

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 

有很多问题需要解决(所以我会在你提供的解释中更新答案)。

没有定义表单的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 

问题在于你说的那句话:

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

WB被声明为一个工作簿,但你试图使它等于一个string。

你想要的是:

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

假定创build的string包含文件的完整path。

如果你这样做,你会遇到以下问题:

 Workbooks(WB).Activate 

这是因为WB被声明为工作簿,但是您试图将其用作sttring。 您需要执行以下操作之一:

 WB.Activate 

要么

 Workbooks(Wb.Name).Activate 

我想你打算把WB声明为一个string,在这种情况下,你需要的唯一改变是:

 Dim WB As String 

假定文件已经打开。

****编辑****

如果你这样做,你需要摆脱“设置”关键字,所以行应该是:

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

试图将string设置为工作簿对象 ,这就是为什么您有错误:

我添加了一个临时variables来告诉你问题来自哪里:

 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