将Excel电子表格的单独选项卡导入到MS Access数据库的单独表格中

我有一个名为Pathmap的表,列Path是我想要导入的文件的文件Path列表

然后我运行下面的代码尝试将所有这些文件导入到我的数据库中的两个表中。 一个从每个文件中调用sts的工作表放到table1中,另一个从每个名为CP的文件中的工作表放到table2中。

 Sub pulloop() DoCmd.RunSQL "delete * from table1" DoCmd.RunSQL "delete * from table2" strSql = "PathMap" Set rs = CurrentDb.OpenRecordset(strSql) With rs If Not .BOF And Not .EOF Then .MoveLast .MoveFirst While (Not .EOF) importfile = rs.Fields("Path") objAccess.NewCurrentDatabase "Nate" DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel12, "TABLE1", importfile, true, STS DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel12, "TABLE2", importfile, True, CP 'Debug.Print rs.Fields("Path") .MoveNext Wend End If .Close End With End Sub 

问题是它debugging,告诉我,我知道的字段只在我的导入文件的STS表中,不存在于目标表2中。 它似乎并没有真正从导入文件的CP表,而是STS的,我不知道我的语法在这里有什么问题。

帮助非常感谢。 通过docmd不同的标签到不同的表格很困难。 transferspreadhseet。

根据所描述的行为

这个

 DoCmd.TransferSpreadsheet acImport, _ acSpreadsheetTypeExcel12, _ "TABLE2", _ importfile, _ true, _ CP 

正在做同样的事情

 DoCmd.TransferSpreadsheet acImport, _ acSpreadsheetTypeExcel12, _ "TABLE2", _ importfile, _ true, _ Empty 

当您编写没有引号的CP ,您正在创build一个variablestypes为CP的variables,并将其赋值为Empty值。

当DoCmd.TransferSpreadsheet接收到range参数为Empty的值时,它假定您需要第一个电子表格。 这就是Access为什么告诉你STS中的字段不存在于table2中的原因。

解决这个问题的方法是给你想要的范围值

 DoCmd.TransferSpreadsheet acImport, _ acSpreadsheetTypeExcel12, _ "TABLE2", _ importfile, _ true, _ "CP!" 

我build议你也将Option Explicit添加到你的模块的顶部,这样你以后不会意外地犯这些错误。 当然这意味着你需要声明rs和strSql。