从许多Excel工作簿和工作表导入数据到一个工作簿/表

我有54​​个excel文件,每个文件有三张,每张都有不同数量的数据条目,但是它们的格式相同,我需要使用VBA将这些数据导入到一个工作簿中。

有什么办法可以编程,所以我可以构build循环来导入数据,但不必为每个循环/工作表写入每个工作簿名称? 我想我可以使用调用函数,但我不知道如何使循环代码独立于它们适用的工作簿名称。

提前谢谢你,

米莉

当然,只要循环工作簿中的文件夹打开他们,然后循环在他们的工作表。 根据格式上的细微差异,导入时可能需要做一些额外的工作。

Sub ImportWorkbooks(destination as workbook, importFolderPath As String) Dim objFSO As Object Dim objFolder As Object Dim objFile As Object Set objFSO = CreateObject("Scripting.FileSystemObject") 'Get the folder object associated with the directory Set objFolder = objFSO.GetFolder(importFolderPath) 'Loop through the Files collection and import each workbook For Each objFile In objFolder.Files Dim source As Workbook Set source = Application.Workbooks.Open(objFile.Path, ReadOnly:=True) ImportWorkbook source, destination wb.Close Set wb = Nothing Next Set objFolder = Nothing Set objFile = Nothing Set objFSO = Nothing End Sub Sub ImportWorkbook(source As Workbook, destination as Workbook) Dim sheet As Worksheet 'Import each worksheet For Each sheet In source.Sheets ImportWorksheet sheet, destination Next sheet End Sub Sub ImportWorksheet(sheet As Worksheet, destination as Workbook) 'Perform your import logic for each sheet here (ie Copy from sheet and paste into a 'sheet into the provided workbook) End Sub 

基本用法如下,导入到当前工作簿中:

 ImportWorkbooks ThisWorkbook, "c:\path\to\folder\containing\workbooks\to\import" 

它只需要两件事:一个工作簿文件名的数组,例如

  dim books books = array("book1.xls","book2.xls",....) 

那么你的循环代码看起来像

 dim myBk as Workbook dim bkFile as string For Each bkFile in books myBk = Workbooks.Open(bkFile, ReadOnly) myBk.Activate 'Transfer cells from myBk to target workbook target.cells(--).Value = myBk.Sheets("myStuff").Cells(--) ... Next 

我无法帮助你的细节。 您需要更改每个循环中的target.cells参数,以移动数据目标。