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

我正在尝试将多个Excel文件导入到特定的Access 2013表中。

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

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

但是这会为每个文件创build新的表,并且我需要将所有101个文件放在一个表中。 我试图testing它的代码在DoCmd.TransferSpreadsheet上失败,我似乎无法得到那部分工作。

我有幸运用这些参数使用命令:

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

该行是从正在运行的应用程序复制粘贴的,将Excel文件中的数据导入到现有的Access表中,而不覆盖或更改表中的现有数据。

参数列表说明:

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

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

我记得,如果Excel表中的单元格中的某些数据types不匹配/匹配Access表中相应列的数据types,则Access将创build一些临时“报表”,这表示在发生错误时import。 也许这就是你正在经历的?

这里是文件types枚举(第二个函数参数)及其相应文件types的列表。 你使用正确的枚举值? 我看到你提供了一个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将使用当前数据库中的表,即运行macros(假设您在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是现有数据库的绝对文件path。 最后一个参数指定是否要以独占模式打开数据库。 默认值是False,它指定数据库应该以共享模式打开。

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

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