Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Macos 如何在excel 2011中编译多个工作簿中的数据_Macos_Excel_Excel 2011_Vba - Fatal编程技术网

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

Macos 如何在excel 2011中编译多个工作簿中的数据,macos,excel,excel-2011,vba,Macos,Excel,Excel 2011,Vba,我正在尝试从文件夹中的多个工作簿复制一行数据,并使用VBA for Excel 2011 Mac将它们粘贴到同一文件夹中的主工作簿中。我有以下代码,但不断遇到运行时错误1004 调试后,它会突出显示Workbooks.OpenMyFile行,但我不知道为什么。这条路是正确的。有谁能告诉我出了什么问题吗 我得到了Windows的原始代码。任何信息将不胜感激 Sub LoopThroughDirectory() Dim MyFile As String Dim erow MyFile = ("/Us

我正在尝试从文件夹中的多个工作簿复制一行数据,并使用VBA for Excel 2011 Mac将它们粘贴到同一文件夹中的主工作簿中。我有以下代码,但不断遇到运行时错误1004

调试后,它会突出显示Workbooks.OpenMyFile行,但我不知道为什么。这条路是正确的。有谁能告诉我出了什么问题吗

我得到了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
您使用的是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

但是您必须修改起始目录以及With End With块中的逻辑,以满足您的需要。

您的代码是否找到了Test.xlsm工作簿?从它的书写方式来看,我认为它不可能……嗨,谢谢你的回复。关于路径,我想引用一个包含多个文件的文件夹。该文件夹名为Excel,位于我的桌面上。但是,实际的工作簿文件是Test.xlsm,我稍后将引用它。我对如何引用文件夹和文件感到困惑。你能澄清一下吗?现在,您正在引用MyFile中的路径。您想要的是循环遍历目录中的文件,然后逐个打开它们。看看这个SO问题,它显示了如何循环遍历目录中的所有文件。然后,您可以将处理工作簿的逻辑合并到其中。我继续编写了一些代码,可以满足您的需要: