我有一个名为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。
答案 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。