Как собрать данные из нескольких рабочих книг в Excel 2011

Я пытаюсь скопировать строку данных из нескольких рабочих книг в папку и вставить их в основную рабочую книгу (в той же папке) с помощью VBA для Excel 2011 Mac. У меня есть следующий код, но постоянно сталкиваюсь с Runtime error 1004,

После отладки это выдвигает на первый план Workbooks.Open(MyFile) линия, но я не могу понять, почему. Путь правильный. Кто-нибудь может посоветовать, пожалуйста, что не так?

Я получил оригинальный код с http://www.familycomputerclub.com/transfer-data-from-multiple-workbooks-into-master-workbook-automatically-using-vba.html который предназначен для Windows. Любая информация будет принята с благодарностью!

Sub LoopThroughDirectory()
Dim MyFile As String
Dim erow
MyFile = ("/Users/administrator/Desktop/Excel")

Do While Len(MyFile) > 0
    If MyFile = "Test.xlsm" Then
    Exit Sub
    End If

    Workbooks.Open (MyFile)
    Range("A2:D2").Copy
    ActiveWorkbook.Close

    erow = Sheet1.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Row
    ActiveSheet.Paste Destination:=Worksheets("Sheet1").Range(Cells(erow, 1), Cells(erow, 4))

    MyFile = Dir

Loop

End Sub

1 ответ

Ты используешь MyFile = ("/Users/administrator/Desktop/Excel") (кстати, почему круглые скобки?), но это не совсем правильный путь к книге, верно?

Я имею в виду, конечно, это должно указывать на файл.xlsm, а не только на каталог... Это должно быть то, что дает вам ошибку.

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

ОБНОВИТЬ

Я думаю, что этот код должен теперь делать то, что вы хотите.

Sub LoopThroughFiles()

Dim directory As String
Dim file As Variant

directory = "C:\Users\RISE123\Desktop\NSRP\AFPR004\Foundations\20140702 - AFPR004 FA9 Change\"
file = Dir(directory)

Do While Len(file) > 0
    If InStr(1, file, ".xlsm", vbBinaryCompare) > 0 Then
        With Workbooks.Open(directory & file)
            Call .Worksheets(1).Range("A2:D2").Copy(ThisWorkbook.Sheets(1).Range("A2:D2"))
            Call .Close(False)
        End With
    End If
    file = Dir
Loop

End Sub

Но вам придется изменить начальный путь к каталогу directoryа также логика в WithEnd With блок в соответствии с вашими потребностями.

Другие вопросы по тегам