我有一个Access数据库和一个Excel工作簿。 我需要做的是查询数据库并将查询粘贴到工作表中。
问题是运行时。我已经完成了程序并且一切正常,但它的工作速度非常慢,我们每次查询最多可以说30秒运行时间,尽管大部分运行时间都来自 CopyFromRecordset 调用。 / p>
数据库在我正在查询的表中有超过800k行。 目前在我的公司,每天早上都有人手动查询表格并将其复制并粘贴到Excel中。我正试图删除这个过程。
这就是我所拥有的:
./index.html
感谢任何帮助。我是VBA和Access的新手,所以这可能很容易解决。感谢
答案 0 :(得分:1)
Excel非常擅长为自己获取数据,而不使用VBA。
在DATA功能区
在某处创建与表或数据视图的连接(例如mdb或SServer)
然后使用“现有连接”按钮将连接表中的数据添加到工作表(ListObject)。
您甚至可以设置工作簿(即连接)每12小时刷新一次数据。
重复所有需要获取数据的表/视图。您甚至可以将SQL指定为连接的一部分。
让excel照顾好自己。
我只是在2秒内从“附近”的磁盘上抓取了一张250,000行表。
它会照顾自己,没有代码可以维护!
答案 1 :(得分:0)
我不知道如何改进CopyFromRecordset
。您可以通过编程方式(在VB中)逐个记录复制recods,但这可能比CopyFromRecordset
慢。
您可以将CreateObject
语句移出循环,已经创建了连接和RecordSet,这可能会更快:
Set objAdoCon = CreateObject("ADODB.Connection")
Set objRcdSet = CreateObject("ADODB.Recordset")
For i = 1 To UBound(DataArr)
...
next i
Set objRcdSet = Nothing
Set objAdoCon = Nothing
您也可以尝试ADO而不是DAO。 ADO似乎在大型记录集上表现得更快。
但是服务器也可能是一个问题,例如,Job和OperationCode上是否有索引?如果没有,那么缓慢可能是服务器选择记录而不是Excel将它们放在工作表中。
答案 2 :(得分:0)
Whelp,从来没有发现为什么CopyFromRecordset运行时出现了问题,但是通过将整个表拉入excel然后进入一个数组来解决我的问题,循环并将它们放在各自的表中。从运行时间30分钟到<1分钟