Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.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
Excel/VBA:如何从多个Excel文件复制数据_Vba_Excel_Loops_Foreach - Fatal编程技术网

Excel/VBA:如何从多个Excel文件复制数据

Excel/VBA:如何从多个Excel文件复制数据,vba,excel,loops,foreach,Vba,Excel,Loops,Foreach,我想循环浏览文件夹中的所有Excel文件,以便对每个文件进行处理(所有文件都具有相同的布局,并且只有Sheet1上的数据) 到目前为止,我有以下代码,它为我提供了一个特定文件夹中Excel文件的列表。 我自己搞不清楚的是如何从每个文件复制数据-具体地说,我需要从每个文件复制A10:E50范围内的数据,然后将其粘贴到我当前文件的页面上(每个文件都在下面) 有人能帮我吗 我的当前代码: Sub FindFiles() Dim objFSO As Object Dim objFolde

我想循环浏览文件夹中的所有Excel文件,以便对每个文件进行处理(所有文件都具有相同的布局,并且只有
Sheet1
上的数据)

到目前为止,我有以下代码,它为我提供了一个特定文件夹中Excel文件的列表。 我自己搞不清楚的是如何从每个文件复制数据-具体地说,我需要从每个文件复制A10:E50范围内的数据,然后将其粘贴到我当前文件的页面上(每个文件都在下面)

有人能帮我吗

我的当前代码:

Sub FindFiles()
    Dim objFSO As Object
    Dim objFolder As Object
    Dim objFile As Object
    Dim ws As Worksheet

    Set objFSO = CreateObject("Scripting.FileSystemObject")
    Set ws = Worksheets.Add

    Set objFolder = objFSO.GetFolder("C:\Users\mo\Desktop\Test-Import\")
    'ws.Cells(1, 1).Value = "The folder " & objFolder.Name & " contains the following Excel files:"

    For Each objFile In objFolder.Files
        ws.Cells(ws.UsedRange.Rows.Count + 1, 1).Value = objFile.Name
    Next

    Set objFolder = Nothing
    Set objFile = Nothing
    Set objFSO = Nothing
End Sub
非常感谢您的帮助, 迈克

试试:

Sub FindFiles()
Dim objFolder As String, objFile As String, r As Integer, c As Integer    'r=row, c=column
Dim ws As Worksheet

Set ws = Worksheets.Add
objFolder = "C:\Users\mo\Desktop\Test-Import\"
objFile = Dir(objFolder)
r = 10: c = 1

While objFile <> vbNullString And c < 6
    ws.Cells(r, c).Value = objFile
    r = r + 1
    If r = 51 Then
        r = 10
        c = c + 1
    End If
    objFile = Dir
Wend

End Sub
Sub-FindFiles()
Dim objFolder作为字符串,objFile作为字符串,r作为整数,c作为整数'r=行,c=列
将ws设置为工作表
设置ws=工作表。添加
objFolder=“C:\Users\mo\Desktop\Test Import\”
objFile=Dir(objFolder)
r=10:c=1
而objFile vbNullString和c<6
ws.Cells(r,c).Value=objFile
r=r+1
如果r=51,则
r=10
c=c+1
如果结束
objFile=Dir
温德
端接头
请注意,这将只列出适合A10:E50(200个文件)的文件数。如果您有200多个文件,宏将不包括它们。如果您想查看更多信息,可以删除条件“和c<6”,或编辑“r”值以列出更多行上的文件

尝试:

Sub FindFiles()
Dim objFolder As String, objFile As String, r As Integer, c As Integer    'r=row, c=column
Dim ws As Worksheet

Set ws = Worksheets.Add
objFolder = "C:\Users\mo\Desktop\Test-Import\"
objFile = Dir(objFolder)
r = 10: c = 1

While objFile <> vbNullString And c < 6
    ws.Cells(r, c).Value = objFile
    r = r + 1
    If r = 51 Then
        r = 10
        c = c + 1
    End If
    objFile = Dir
Wend

End Sub
Sub-FindFiles()
Dim objFolder作为字符串,objFile作为字符串,r作为整数,c作为整数'r=行,c=列
将ws设置为工作表
设置ws=工作表。添加
objFolder=“C:\Users\mo\Desktop\Test Import\”
objFile=Dir(objFolder)
r=10:c=1
而objFile vbNullString和c<6
ws.Cells(r,c).Value=objFile
r=r+1
如果r=51,则
r=10
c=c+1
如果结束
objFile=Dir
温德
端接头
请注意,这将只列出适合A10:E50(200个文件)的文件数。如果您有200多个文件,宏将不包括它们。如果您想查看更多信息,可以删除条件“和c<6”,或者编辑“r”值以列出更多行上的文件

尝试以下操作

Sub FindFiles()
Dim objFSO As Object
Dim objFolder As Object
Dim objFile As File
Dim ws As Worksheet
Dim srWS As Worksheet
Dim wb As Workbook
Dim path As String
Set objFSO = CreateObject("Scripting.FileSystemObject")
path = "  " 'Enter your path here
Set objFolder = objFSO.GetFolder(path)
'ws.Cells(1, 1).Value = "The folder " & objFolder.Name & " contains the following Excel files:"

Set ws = Worksheets.Add

For Each objFile In objFolder.Files
    rowCount = ws.UsedRange.Rows.Count
    If (objFile.Type = "Microsoft Excel Worksheet" Or objFile.Type = "Microsoft Excel Macro-Enabled Worksheet") Then
     Set wb = Application.Workbooks.Open(path & objFile.Name)
     Set srWS = wb.Sheets(1)
     srWS.Range("A10:E50").Copy
     ws.Activate
     If rowCount = 1 Then
        ws.Cells(1, 1).Value = objFile.Name
        ws.Cells(rowCount + 1, 1).Select
     Else
        ws.Cells(rowCount + 1, 1).Value = objFile.Name
        ws.Cells(rowCount + 2, 1).Select
     End If
     ActiveSheet.Paste
     Application.DisplayAlerts = False
     wb.Close
    End If

Next
Application.DisplayAlerts = True
Set objFolder = Nothing
Set objFile = Nothing
Set objFSO = Nothing
End Sub
试试下面的

Sub FindFiles()
Dim objFSO As Object
Dim objFolder As Object
Dim objFile As File
Dim ws As Worksheet
Dim srWS As Worksheet
Dim wb As Workbook
Dim path As String
Set objFSO = CreateObject("Scripting.FileSystemObject")
path = "  " 'Enter your path here
Set objFolder = objFSO.GetFolder(path)
'ws.Cells(1, 1).Value = "The folder " & objFolder.Name & " contains the following Excel files:"

Set ws = Worksheets.Add

For Each objFile In objFolder.Files
    rowCount = ws.UsedRange.Rows.Count
    If (objFile.Type = "Microsoft Excel Worksheet" Or objFile.Type = "Microsoft Excel Macro-Enabled Worksheet") Then
     Set wb = Application.Workbooks.Open(path & objFile.Name)
     Set srWS = wb.Sheets(1)
     srWS.Range("A10:E50").Copy
     ws.Activate
     If rowCount = 1 Then
        ws.Cells(1, 1).Value = objFile.Name
        ws.Cells(rowCount + 1, 1).Select
     Else
        ws.Cells(rowCount + 1, 1).Value = objFile.Name
        ws.Cells(rowCount + 2, 1).Select
     End If
     ActiveSheet.Paste
     Application.DisplayAlerts = False
     wb.Close
    End If

Next
Application.DisplayAlerts = True
Set objFolder = Nothing
Set objFile = Nothing
Set objFSO = Nothing
End Sub


谢谢你。我看不到在这里复制和粘贴数据的解决方案(范围A10:E50)?;)你知道那个文件夹中有多少文件吗?您无法将可变数量的文件放入静态范围。谢谢-它通常在1到5之间,文件夹中的文件不会超过10个。无论如何,我已更新了我的答案,请让我知道它是否适合您谢谢-我将很快测试并报告。谢谢。我看不到在这里复制和粘贴数据的解决方案(范围A10:E50)?;)你知道那个文件夹中有多少文件吗?您无法将可变数量的文件放入静态范围。谢谢-它通常在1到5之间,文件夹中的文件不会超过10个。无论如何,我更新了我的答案,让我知道它是否适合您谢谢-我将很快测试并报告。非常感谢-我将很快测试并报告。欢迎您。如果你的问题解决了。请将问题标记为已回答。如果不让我知道你的处境,我在我的机器上测试过,效果很好。请尝试您的声明,即Dim objFile As OBJECTION您确定在分配给“path”的路径中有excel文件吗?如果是这样,您的工作簿-工作表1中的数据是否在您在资格证书中提到的范围内?您试图从中获取数据的文件应为“Microsoft Excel工作表”类型,正如我这样编码的那样。如果您的文件为.xlsm,则应将其更改为“启用Microsoft Excel宏的工作表”非常感谢,我将很快进行测试并报告。欢迎您。如果你的问题解决了。请将问题标记为已回答。如果不让我知道你的处境,我在我的机器上测试过,效果很好。请尝试您的声明,即Dim objFile As OBJECTION您确定在分配给“path”的路径中有excel文件吗?如果是这样,您的工作簿-工作表1中的数据是否在您在资格证书中提到的范围内?您试图从中获取数据的文件应为“Microsoft Excel工作表”类型,正如我这样编码的那样。如果您的文件为.xlsm,则应将其更改为“启用Microsoft Excel宏的工作表”