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

时间:2014-08-19 14:54:50

标签: sql excel access-vba

我有一个名为Pathmap的表,其中列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

问题是它调试,告诉我我知道的字段只在我的importfiles的STS表中,在目标Table2中不存在。它实际上并没有从导入文件的CP表中提取,而是从STS中提取,我不确定我的语法在这里有什么问题。

非常感谢。通过docmd对不同表格的不同选项卡很困难。 transferspreadhseet。

1 个答案:

答案 0 :(得分:1)

基于所描述的行为

这个

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

正在做同样的事情

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

当您在没有引号的情况下编写CP时,您正在创建一个名为CP的变量,该变量属于variant类型,并为其指定值Empty

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

解决此问题的方法是提供您想要的范围值

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

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