Excel VBA将各种Excel文件导入到主控表
我有一个主Excel工作簿,我想创建一个宏,从7个Excel文件中导入指定范围内的数据。除了实际数据外,这些文件在结构上都是相同的。使用import宏/按钮,我基本上希望获得一个open files(打开文件)对话框,选择所有文件,并让宏将范围内的数据逐个添加到主文件中。我从这里的另一篇文章中得到了一些启发,这使得它只适用于一个文件:需要调整的代码必须能够选择7个文件,并将其逐个动态添加到目标范围Excel VBA将各种Excel文件导入到主控表,excel,import,vba,Excel,Import,Vba,我有一个主Excel工作簿,我想创建一个宏,从7个Excel文件中导入指定范围内的数据。除了实际数据外,这些文件在结构上都是相同的。使用import宏/按钮,我基本上希望获得一个open files(打开文件)对话框,选择所有文件,并让宏将范围内的数据逐个添加到主文件中。我从这里的另一篇文章中得到了一些启发,这使得它只适用于一个文件:需要调整的代码必须能够选择7个文件,并将其逐个动态添加到目标范围 Sub getData() Dim slaveBook As Workbook Dim fil
Sub getData()
Dim slaveBook As Workbook
Dim filter As String
Dim caption As String
Dim slaveFilename As String
Dim slaveWorkbook As Workbook
Dim targetWorkbook As Workbook
Set targetWorkbook = Application.ActiveWorkbook
filter = "Team file (*.xlsm),*.xlsm"
caption = "Please select the team file"
slaveFilename = Application.GetOpenFilename(filter, , caption)
Set slaveWorkbook = Application.Workbooks.Open(slaveFilename)
Dim targetSheet As Worksheet
Set targetSheet = targetWorkbook.Worksheets("MASTER")
Dim sourceSheet As Worksheet
Set sourceSheet = slaveWorkbook.Worksheets("Interface")
targetSheet.Range("B5", "J8").Value = sourceSheet.Range("B5", "J8").Value
slaveWorkbook.Close
End Sub
已更新-已更改代码,因此现在应该将所有信息保存到彼此下方的主控表中。显然,这是一种非常简单的方法,并且限制您在代码结束之前只打开7个文件。如果您想在将来添加更多内容,只需扩展数组和范围代码,或修改范围代码以查找最后一行,将数据粘贴到LastRow=RangeJ65536.EndxlUp.row上即可开始文件是否移动了文件位置?如果没有,为什么不将文件位置存储在一个数组中,并通过代码循环该数组以在所有7个工作簿上执行宏呢?谢谢你的想法。这些文件可能会移动位置,因此不幸的是,我不得不以这种方式构建它。现在,我认为它只需要能够循环文件,并将范围逐个添加到主范围。您将面临的问题是,为了循环,您需要告诉VBA文件路径在哪里,或者让用户在每个工作簿循环上选择工作簿。我认为后者可以。我必须如何调整代码以适应这种情况?您如何在主控表上收集数据?如果上面的代码是循环的,它将覆盖母版工作表中上一个Slave工作簿的数据。你有7张母版纸吗?或者你把信息放在不同的栏目里,谢谢!但是,我确实需要从一个主文件,一个表中的所有从属文件的数据。基本上需要动态的是targetSheet.Range。sourceSheet.Range对于每个从属服务器都是相同的。但我需要循环来复制每个源代码表。范围低于前一个。因此,如果第一个文件从B5:J8开始,那么下一个文件中的数据必须复制到该文件下面,如此类推on@user3696409-请参阅修改后的答案
Sub getData()
Dim slaveBook As Workbook
Dim filter As String
Dim caption As String
Dim slaveFilename As String
Dim slaveWorkbook As Workbook
Dim targetWorkbook As Workbook
i = 1
For i = 1 To 7
Set targetWorkbook = Application.ActiveWorkbook
On Error GoTo errorhandler
filter = "Team file (*.xlsm),*.xlsm"
caption = "Please select the team file"
slaveFilename = Application.GetOpenFilename(filter, , caption)
Set slaveWorkbook = Application.Workbooks.Open(slaveFilename)
On Error GoTo 0
On Error GoTo err2
Dim targetSheet As Worksheet
Set targetSheet = targetWorkbook.Worksheets("MASTER")
Dim sourceSheet As Worksheet
Set sourceSheet = slaveWorkbook.Worksheets("Interface")
If i = 1 Then targetSheet.Range("B5", "J8").Value = sourceSheet.Range("B5", "J8").Value
If i = 2 Then targetSheet.Range("B9", "J12").Value = sourceSheet.Range("B5", "J8").Value
If i = 3 Then targetSheet.Range("B13", "J16").Value = sourceSheet.Range("B5", "J8").Value
If i = 4 Then targetSheet.Range("B17", "J20").Value = sourceSheet.Range("B5", "J8").Value
If i = 5 Then targetSheet.Range("B21", "J24").Value = sourceSheet.Range("B5", "J8").Value
If i = 6 Then targetSheet.Range("B25", "J28").Value = sourceSheet.Range("B5", "J8").Value
If i = 7 Then targetSheet.Range("B29", "J32").Value = sourceSheet.Range("B5", "J8").Value
slaveWorkbook.Close False 'wont prompt to save changes (will close without saving),
'remove false if you do need to save changes
i = i + 1
Next i
Exit Sub
errorhandler:
MsgBox "You didn't select a valid file!"
Exit Sub
err2:
MsgBox "Error - Most likely reason is that the required sheet is not found in Slave workbook"
Exit Sub
End Sub