Excel/VBA:如何从多个Excel文件复制数据
我想循环浏览文件夹中的所有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
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宏的工作表”