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

时间:2015-09-10 20:23:25

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

我正在努力将多个Excel文件导入特定的Access 2013表格。

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

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

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

1 个答案:

答案 0 :(得分:2)

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

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

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

参数列表说明:

  • 0:应与acImport enum
  • 相同
  • 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文件中。这使得维护宏更容易。请记住在工具中添加对Microsoft Access对象库的引用 - > VBA编辑器中的参考。如果您有多个Excel文件和多个Access文件,您可以考虑使用一些主Excel工作簿,它只保存宏,然后打开其他Excel文件和Access数据库。