将许多 Excel 工作簿和工作表中的数据导入单个工作簿/表格

Posted

技术标签:

【中文标题】将许多 Excel 工作簿和工作表中的数据导入单个工作簿/表格【英文标题】:Importing data from many excel workbooks and sheets into a single workbook/table 【发布时间】:2011-06-04 08:59:08 【问题描述】:

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

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

非常感谢您,

米莉

【问题讨论】:

【参考方案1】:

只需要两件事: 包含工作簿文件名的数组,例如

 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 参数以移动数据目标。

【讨论】:

【参考方案2】:

当然,只需遍历文件夹中的工作簿,打开它们,然后遍历它们的工作表。根据格式的细微差别,您在导入时可能需要做一些额外的工作。

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 (i.e. Copy from sheet and paste into a 
    'sheet into the provided workbook)

End Sub

导入当前工作簿的基本用法如下:

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

【讨论】:

编译时,我似乎在 'ImportWorksheet' 中的 'sheet' 参数上得到了 'Byref 参数类型不匹配'。知道为什么吗?尽管如此,代码看起来非常干净。谢谢! 是的,sheet变量具体需要初始化为Worksheet类型。 VBA 将为您提供的奇妙的神秘错误消息之一:)。将更新代码以反映这一点。

以上是关于将许多 Excel 工作簿和工作表中的数据导入单个工作簿/表格的主要内容,如果未能解决你的问题,请参考以下文章

在 R 中拆分大型数据框并输出到单个 Excel 工作簿中的单独工作表中

通过 VBA 访问 Excel 表中的图像

如何将单个工作表中的多行(在 excel 中)转换为多个 CSV 文件

将文件夹中的所有文件(所有 excel 文件)导入到 access 数据库中的单个表中

在Delphi中如何控制往Excel的工作表中传入文本文件数据的问题?有请高手

动态生成链接菜单 vb.net