2016-11-08 106 views
0

我已经无休止地搜索了解决方案,但根本找不到它。任何帮助将大规模赞赏。将Excel中的DAO记录集复制到Access表中

我目前有一些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

毕竟,在寻找解决方案之后,我终于达到了寻求帮助的地步,然后无论如何我都明白了。

我使用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。现在它运行速度更快。可能还有另一种更好的方法,但至少我已经取得了进展。希望这对其他人有用。

相关问题