将Access数据库查询复制到Excel电子表格中

时间:2015-08-13 12:52:41

标签: mysql excel vba excel-vba ms-access

我有一个Access数据库和一个Excel工作簿。 我需要做的是查询数据库并将查询粘贴到工作表中。

问题是运行时。我已经完成了程序并且一切正常,但它的工作速度非常慢,我们每次查询最多可以说30秒运行时间,尽管大部分运行时间都来自 CopyFromRecordset 调用。 / p>

数据库在我正在查询的表中有超过800k行。 目前在我的公司,每天早上都有人手动查询表格并将其复制并粘贴到Excel中。我正试图删除这个过程。

这就是我所拥有的:

./index.html

感谢任何帮助。我是VBA和Access的新手,所以这可能很容易解决。感谢

3 个答案:

答案 0 :(得分:1)

Excel非常擅长为自己获取数据,而不使用VBA。

在DATA功能区

  1. 在某处创建与表或数据视图的连接(例如mdb或SServer)

  2. 然后使用“现有连接”按钮将连接表中的数据添加到工作表(ListObject)。

  3. 您甚至可以设置工作簿(即连接)每12小时刷新一次数据。

  4. 重复所有需要获取数据的表/视图。您甚至可以将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分钟