【问题标题】:Importing separate tabs of Excel spreadsheets into separate tables of MS Access database将 Excel 电子表格的单独选项卡导入 MS Access 数据库的单独表中
【发布时间】:2014-08-19 14:54:50
【问题描述】:

我有一个名为 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 使用不同的选项卡到不同的表的困难。转移电子表格。

【问题讨论】:

  • 变量STS和CP的值是什么
  • sts 和 cp 只是导入工作簿中工作表的名称。
  • STS 和 CP 是变量(它们周围没有引号)如果它们没有在 Sub 之外的某个地方声明,它们的值将是 Empty 这可能就是为什么你有麻烦了。

标签: sql excel ms-access vba


【解决方案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 中的字段在 table2 中不存在。

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

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

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

【讨论】:

  • 谢谢这完全有道理,但是我现在在第二个文件上失败了 "Field F8 doesn't exist in destination table 'Table 1'" 。 CP选项卡只有7列,导入工作簿的STS选项卡有十几列。它很好地导入了第一个文件,并且第一个和第二个 imnport 文件的列完全相同。不知道这里发生了什么。
  • @user3049991 在H 列中可能存在某种值。将范围限制为您关心的列可能会更好。例如"CP!A:G"
  • @user3049991 误读了您的评论。所以首先我会使用“STS!”其次,听起来他们在“H”列中没有标题。
  • H 列没有数据,也没有表头,所以我不想让它看那个。我已将其修改为“!CPA:G”,但现在我收到一个奇怪的错误,提示“Microsoft Office 访问无法将所有数据附加到表中。x 记录的内容已被删除,0 记录因密钥而丢失违规。如果数据被删除,则您粘贴或导入的数据与目标表中的字段数据类型或字段大小属性不匹配。”我点击继续,数据看起来很好。这是什么?是否可以始终对其进行编码以对此回答“是”?它会为每个文件弹出!
  • 在TransferSpreadSheet 之前添加DoCmd.SetWarnings False ,然后在之后添加DoCmd.SetWarnings True
猜你喜欢
  • 1970-01-01
  • 2013-10-24
  • 2014-10-13
  • 1970-01-01
  • 1970-01-01
  • 2013-11-10
  • 2013-11-09
  • 1970-01-01
  • 2011-06-08
相关资源
最近更新 更多