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

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

问题是运行时。 我已经join了这个程序,一切正常,但是它的工作速度非常慢,我们说每个查询的运行时间高达30秒,尽pipe这个运行时间的大部分是通过CopyFromRecordset调用来实现的。

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

这是我有什么:

Sub new1() Dim objAdoCon As Object Dim objRcdSet As Object ' gets query information ' Dim DataArr() Sheets("Data2").Activate DataArr = Range("A1:B40") For i = 1 To UBound(DataArr) job = DataArr(i, 1) dest = DataArr(i, 2) If InStr(dest, "HT") > 0 Then OpCode = "3863" ElseIf InStr(dest, "HIP") > 0 Then OpCode = "35DM" End If strQry = "SELECT * from [BATCHNO] WHERE ([BATCHNO].[Job]='" & job & "') AND ([BATCHNO].[OperationCode] = " & "'" & OpCode & "')" Set objAdoCon = CreateObject("ADODB.Connection") Set objRcdSet = CreateObject("ADODB.Recordset") objAdoCon.Open "Provider = Microsoft.Jet.oledb.4.0;Data Source = C:\Users\v-adamsje\Desktop\HTmaster.mdb" 'long run time objRcdSet.Open strQry, objAdoCon 'very long run time ThisWorkbook.Worksheets(dest).Range("A2").CopyFromRecordset objRcdSet Set objAdoCon = Nothing Set objRcdSet = Nothing Next i End Sub 

任何帮助表示赞赏。 我是VBA和Access新手,所以这可能是一个简单的修复。 谢谢

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

在数据function区上

  1. 创build到某个表或数据视图的连接(例如,mdb或SServer)

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

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

对所有需要抓取数据的表/视图重复。 你甚至可以指定SQL作为连接的一部分。

让excel照顾自己。

我只是在2秒内从“附近”的磁盘上抓起一张250,000行的表格。

它会照顾自己,没有代码维护!

我不知道如何改进CopyFromRecordset 。 您可以以编程方式(在VB中)逐个复制logging,但可能会比CopyFromRecordset慢。

您可以将CreateObject语句移出循环,使用已经创build的连接和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似乎在大型唱片上performance更快。

但是服务器也可能是一个问题,例如,Job和OperationCode上是否有索引? 如果没有,那么慢的可能是服务器selectlogging,而不是Excel把它们放在工作表中。

Whelp,从来没有发现为什么CopyFromRecordset运行时是obsurd,但解决了我的问题,把整个表格拉到excel,然后到一个数组,通过循环,并把它们放在各自的工作表。 从30min运行到<1min