将DAO记录集从Excel复制到Access表

时间:2016-11-08 14:54:31

标签: sql access-vba

我无休止地寻找解决方案,但根本无法弄明白。任何帮助都会受到大力赞赏。

我目前有一些Access VBA代码,它与excel工作表中的范围设置DAO记录集连接。 (我已经避免将电子表格链接为链接表,因为我不确定你是否可以只使用特定范围来执行此操作,不幸的是,以任何方式编辑电子表格都不是一种选择)。

然后我需要将这些数据复制到一个表中。我正在循环遍历每条记录并将其添加到新的记录集中,如下所示:

Set rsTbl = CurrentDb.OpenRecordset("tblData")
dbpath = "S:\OPS\Agent Performance.xls"
Set db = OpenDatabase(dbpath, False, True, "Excel 8.0;HDR=Yes;")
Set rst = db.OpenRecordset("SELECT * FROM [AgentActivity$C7:AP1000]")

Do Until rst.EOF
    rsTbl.AddNew
    For Each fld In rst.Fields
        rsTbl(fld.Name) = fld.Value
    Next fld
    rsTbl.Update
rst.MoveNext
Loop

这很好用,但我需要遍历每个工作簿中的大量记录,并循环遍历大量工作簿。我希望有一种方法可以将整个记录集转储到tblData中,而不是像我目前那样必须循环。

有没有人知道更好的方法?

1 个答案:

答案 0 :(得分:2)

在寻找解决方案的所有这段时间之后,我终于达到了我寻求帮助的地步,然后无论如何我都明白了。

我使用了transferSpreadsheet方法来链接我需要的范围,然后使用INSERT INTO语句将数据移动到tblData

DoCmd.DeleteObject actable, "tblTemp"
path = "S:\OPS\Agent Performance.xls"
DoCmd.TransferSpreadsheet acLink, acSpreadsheetTypeExcel9, "tblTemp", path, True, "AgentActivity!C7:AP1000"
CurrentDb.Execute "INSERT INTO tblData SELECT * FROM tblTemp"

然后我可以循环到下一个工作簿并覆盖tblTemp。它现在运行得更快。可能有另一种方式更好,但至少我取得了进展。希望这对其他人有用。