我正在努力将多个Excel文件导入特定的Access 2013表格。
我尝试使用我从另一个SO问题中找到的代码:
Do While Len(strFile) > 0
DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, _
strTable, strPathFile, blnHasFieldNames
Loop
但这会为每个文件创建新表,我需要将所有101个文件放在一个表中。我尝试测试它的代码在DoCmd.TransferSpreadsheet上失败了,我似乎无法让这部分工作。
答案 0 :(得分:2)
我很幸运使用带有这些参数的命令:
DoCmd.TransferSpreadsheet 0, 10, tableName, wbPath, True, "MySheet!A1:C100"
该行从工作应用程序中复制粘贴,其中Excel文件中的数据被导入到现有的Access表中,而不会覆盖或更改表中的现有数据。
参数列表说明:
我不记得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数据库。