![](/img/trans.png)
[英]Execute Excel Macro, Then Import Into Access Table On Multiple Excel Files In A Folder
[英]Import entire folder of Excel files into Access 2013
我很难将多个Excel文件导入到特定的Access 2013表中。
我尝试使用从另一个SO问题中找到的代码:
Do While Len(strFile) > 0
DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, _
strTable, strPathFile, blnHasFieldNames
Loop
但这会为每个文件创建新表,我需要将所有101个文件都放在一个表中。 我尝试测试的代码在DoCmd.TransferSpreadsheet上失败,而且我似乎根本无法使该部分正常工作。
我很幸运使用带有以下参数的命令:
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文件中。 这样可以更轻松地维护宏。 切记要在VBA编辑器的“工具”->“引用”中添加对Microsoft Access对象库的引用。 如果您都有多个Excel文件和多个Access文件,则可以考虑拥有一些主Excel工作簿,该工作簿仅保存宏,然后打开其他Excel文件和Access数据库。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.