【问题标题】:Import entire folder of Excel files into Access 2013将 Excel 文件的整个文件夹导入 Access 2013
【发布时间】:2015-09-10 20:23:24
【问题描述】:

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

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

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

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

【问题讨论】:

  • 假设每个 Excel 文件的结构相同,只需在 strTable argument 中使用相同的 Access 表名即可。

标签: vba excel ms-access ms-access-2013


【解决方案1】:

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

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

该行是从工作应用程序中复制粘贴的,其中 Excel 文件中的数据被导入到现有的 Access 表中,而不会覆盖或更改表中的现有数据。

参数列表说明:

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

我不记得 Excel 工作表中的列标题和/或列顺序是否必须与 Access 表列匹配。但它们应该匹配肯定是有道理的。你检查过吗?

我记得如果 Excel 工作表中单元格中的某些数据类型与 Access 表中相应列的数据类型不匹配/不匹配,Access 会创建一些临时“报告表”,这表明出现错误在导入过程中发生。也许这就是你正在经历的?

这里是文件类型枚举(第二个函数参数)及其对应文件类型的列表。您是否使用了正确的枚举值?我看到您提供的值为 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 将使用您从中运行宏的当前数据库中的表(假设您从 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,表示应以共享模式打开数据库。

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

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

【讨论】:

  • 我得到了这个大部分工作,但有没有办法指定使用哪个 Access 数据库,或者我必须确保表名对我的计算机是唯一的?我有一个表,我在第一次上传时手动创建了一个表,以确保列名和数据类型,但我将使用多个 Access 数据库运行相同类型的程序,因为需要拆分有效负载才能进入 Access(超过 2Gig 限制)。
  • 查看更新的答案@AmandaC。如果它有助于解决您的问题,请将其标记为答案。谢谢!
猜你喜欢
  • 2019-07-16
  • 1970-01-01
  • 2019-06-20
  • 1970-01-01
  • 1970-01-01
  • 2020-12-23
  • 2015-04-01
  • 2014-09-19
  • 1970-01-01
相关资源
最近更新 更多