VBA ADO Recordset .Copyfromrecordset长时间运行

我正在寻找可以解决这个运行时间构build的VBA代码,或者是什么可能导致这个问题的build议。

我正在运行一个VBA脚本,使用ADODB从SQL Server数据库中检索数据。 我已经运行testing的行数据复制到我的Excel表格。 运行时间是变化的; 然而,我发现这条线的运行时间在3-30秒之间:

Sheets(1).range("A8").CopyFromRecordset recordSet 

logging集中的数据由300行和13列组成。

有一件我觉得奇怪的事情是,当excel应用程序closures并重新打开时,运行时似乎重置为正常。

下面是对.copyfromrecordset行testing的运行时间的一个概念:

  • testing1:3秒
  • testing2:3秒
  • testing3:3秒
  • testing4:5秒
  • testing5:5秒
  • testing6:6秒
  • testing7:7秒
  • testing8:6秒
  • testing9:8秒
  • testing9:10秒
  • testing20:24秒

我运行本地命令的testing,如格式化单元格宽度/高度,这些运行时间在1或2秒不变。

也许我错误地使用了logging集,或者如果没有find解决scheme,我只会减less数据库调用,这会阻止我获得最新的数据。

我已经通过检查任何我认为可能是问题的未封闭的logging对象,但没有任何开放。

 Function Query(SQL As String) Dim recordSet As ADODB.recordSet Dim Field As ADODB.Field Set recordSet = New ADODB.recordSet recordSet.Open SQL, Conn, adOpenForwardOnly, adLockReadOnly, adCmdTxt If recordSet.State Then 'seting up table headers Dim i As Integer For i = 0 To recordSet.Fields.Count - 1 Sheets(1).Cells(7, 1 + i).value = recordSet.Fields(i).name Next i Sheets(1).range("A7:M7").Font.Bold = True t = Now() 'insert recordset data into cells Sheets(1).range("A8").CopyFromRecordset recordSet MsgBox Format(Now() - t, "hh:mm:ss")** 'close recordset object recordSet.Close Set recordSet = Nothing End If End Function 

数据库连接

 Function ConnectToDB(Server As String, Database As String) As Boolean Set Conn = New ADODB.Connection On Error Resume Next Conn.ConnectionString = "Provider=SQLOLEDB; Integrated Security=SSPI; Data Source=" & Server & "; Initial Catalog=" & Database & ";" Conn.Open If Conn.State = 0 Then ConnectToDB = False Else ConnectToDB = True End If End Function