Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/24.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文件导入到主控表_Excel_Import_Vba - Fatal编程技术网

Excel VBA将各种Excel文件导入到主控表

Excel VBA将各种Excel文件导入到主控表,excel,import,vba,Excel,Import,Vba,我有一个主Excel工作簿,我想创建一个宏,从7个Excel文件中导入指定范围内的数据。除了实际数据外,这些文件在结构上都是相同的。使用import宏/按钮,我基本上希望获得一个open files(打开文件)对话框,选择所有文件,并让宏将范围内的数据逐个添加到主文件中。我从这里的另一篇文章中得到了一些启发,这使得它只适用于一个文件:需要调整的代码必须能够选择7个文件,并将其逐个动态添加到目标范围 Sub getData() Dim slaveBook As Workbook Dim fil

我有一个主Excel工作簿,我想创建一个宏,从7个Excel文件中导入指定范围内的数据。除了实际数据外,这些文件在结构上都是相同的。使用import宏/按钮,我基本上希望获得一个open files(打开文件)对话框,选择所有文件,并让宏将范围内的数据逐个添加到主文件中。我从这里的另一篇文章中得到了一些启发,这使得它只适用于一个文件:需要调整的代码必须能够选择7个文件,并将其逐个动态添加到目标范围

 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