将 Excel 个文件的整个文件夹导入 Access 2013

Import entire folder of Excel files into Access 2013

我很难尝试将多个 Excel 文件导入特定的 Access 2013 table。

我尝试使用从另一个 SO 问题中找到的代码:

Do While Len(strFile) > 0
    DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, _
        strTable, strPathFile, blnHasFieldNames
Loop

但这会为每个文件生成新的 table,我需要将所有 101 个文件放在一个 table 中。我尝试测试的代码在 DoCmd.TransferSpreadsheet 上失败了,我似乎根本无法让那部分工作。

我很幸运地使用了带有这些参数的命令:

DoCmd.TransferSpreadsheet 0, 10, tableName, wbPath, True, "MySheet!A1:C100"

该行是来自工作应用程序的 copy-pasted,其中来自 Excel-file 的数据被导入到现有的 Access table 而没有覆盖或更改 [=69] 中的现有数据=].

参数列表说明:

  • 0: 应与 acImport 枚举相同
  • 10:与 acSpreadsheetTypeExcel12Xml 枚举相同(我想我使用整数 10 是因为某些兼容性,其中枚举具有不同的值或在某些情况下未定义Access 版本)
  • table名称:是您的 Access 数据库中现有 table 的名称
  • wbPath: 是以xlsx格式保存的工作簿的绝对文件路径
  • True:表示 sheet 有 headers
  • "MySheet!A1:C100" 表示 sheet 名称和应导入的单元格范围。

我不记得 headers and/or 列中 Excel sheet 列的顺序是否必须与 Access table 列相匹配。但他们应该匹配肯定是有道理的。你检查过了吗?

我记得如果 Excel-sheet 中单元格中的某些数据类型没有 match/fit Access table 中相应列的数据类型,Access 会创建一些临时的"report tables",表示导入过程中发生了错误。也许这就是您遇到的情况?

这是文件类型枚举列表(第二个函数参数)及其对应的文件类型。您使用的是正确的枚举值吗?我看到您提供了 acSpreadsheetTypeExcel9 的值,您是从 Excel 2000 个文件中导入的吗?

Excel 3                           acSpreadsheetTypeExcel3
Excel 95                          acSpreadsheetTypeExcel7
Excel 97                          acSpreadsheetTypeExcel8
Excel 2000                        acSpreadsheetTypeExcel9 (default)
Excel 2002                        acSpreadsheetTypeExcel10
Excel 2003                        acSpreadsheetTypeExcel11
Excel 2007 Binary Format (.xslb)  acSpreadsheetTypeExcel12
Excel 2007 (xlsx)                 acSpreadsheetTypeExcel12Xml

更新:

Access 将使用当前数据库中的 table,您 运行 来自的宏(假设您 运行 它来自 Access)。如果你想导入到另一个数据库,你可以这样做:

Dim accessApplication As Variant
Set accessApplication = CreateObject("Access.Application")

accessApplication.OpenCurrentDatabase databasePath, False

accessApplication.DoCmd.TransferSpreadsheet 0, 10, tableName, wbPath, True, "MySheet!A1:C100"

其中 databasePath 是现有数据库的绝对文件路径。最后一个参数指定是否要以独占模式打开数据库。默认值为False,指定数据库应该以共享模式打开。

以上代码将确保数据被导入到指定的 table 特定的 Access 数据库文件中。

如果您要导入的所有数据都存储在一个 Excel-file 中,我建议您将导入宏放在 Excel-file 中,而不是将其放在多个 Access 文件中。这使得维护宏更容易。请记住在 VBA 编辑器的工具 -> 引用中添加对 Microsoft Access Object 库的引用。如果你们都有多个 Excel-files 和多个 Access 文件,你可以考虑拥有一些主 Excel-workbook,它只保存宏,然后打开其他 Excel-files 和 Access 数据库。