如何在excel 2011中编译来自多个工作簿的数据

时间:2014-07-29 21:37:16

标签: excel macos excel-vba excel-2011 vba

我正在尝试从文件夹中的多个工作簿复制一行数据,并使用VBA for 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 个答案:

答案 0 :(得分:0)

你正在使用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,以及With End With块中的逻辑以满足您的需求。