循环文件

时间:2015-08-17 15:25:55

标签: excel vba excel-vba

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

我正在尝试遍历此列表,激活相应的文件,将值复制并粘贴到原始文件中的相应选项卡中。虽然我似乎无法使这个代码工作。

有人可以告诉我如何修复它吗?

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

3 个答案:

答案 0 :(得分: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

答案 1 :(得分: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

我认为您打算将WB声明为字符串,在这种情况下,您需要的唯一更改是:

Dim WB As String

假设文件已经打开。

**** **** EDIT

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

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

答案 2 :(得分: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