使用VBA运行多个SQL查询(Oracle) - 为什么这么慢?

时间:2012-10-09 15:49:30

标签: sql oracle vba excel-vba excel

我编写了一个简单的VBA代码来运行多个SQL查询。结果应该是excel表。问题是程序需要很长时间才能完成!事实上,逐个运行这些查询要快得多。谁能告诉我如何让它更快地工作?

这是我的代码:

Const strCon As String = "Driver={Microsoft ODBC for Oracle}; " & _
"CONNECTSTRING=(DESCRIPTION=" & _
"(ADDRESS=(PROTOCOL=TCP)" & _
"(HOST=xxxx)(PORT=xxx))" & _
"(CONNECT_DATA=(SID=RTD))); uid=xxxx; pwd=xxxx;"

Sub RunScripts()

Dim r As Integer
Dim con As ADODB.Connection
Dim rs As ADODB.Recordset
Dim q1 As String
Dim q2 As String
Dim q3 As String

Set con = New ADODB.Connection
Set rs = New ADODB.Recordset

q1 = Worksheets("Data").Range("i28").Value
Set rs = con.Execute(q1)
Worksheets("ACCV Query").Range("A2").CopyFromRecordset rs

Set rs = Nothing
r = Worksheets("ACCV Query").Range("A65536").End(xlUp).Row

'Next SQL Query
q2 = Worksheets("Data").Range("j28").Value
Set rs = con.Execute(q2)
Worksheets("ACCV Query").Range("A" & r).CopyFromRecordset rs

Set rs = Nothing
r = Worksheets("ACCV Query").Range("A65536").End(xlUp).Row

'Next SQL Query
q3 = Worksheets("Data").Range("k28").Value
Set rs = con.Execute(q3)
Worksheets("ACCV Query").Range("A" & r).CopyFromRecordset rs

con.Close
Set con = Nothing
Set rs = Nothing

End Sub

SQL查询存储在单元格中,并命名为q1,q2等(所有这些都有效)。

当我运行两个这样的查询时,它运行正常,但是一旦我启动了15 ......宏从未完成工作。每个SQL脚本都需要几秒钟才能运行,因此它应该可以快速运行。

如何让它更快地运作? 求救!

非常感谢! 微米。

1 个答案:

答案 0 :(得分:3)

通常会减慢Excel的速度是不断更新屏幕并重新计算。每当您更改单元格的内容时,它都会重新计算并刷新屏幕。在大插入时,这确实会减慢操作速度。幸运的是你可以关闭它。

在功能的顶部,输入:

Application.Calculation = xlManual
Application.ScreenUpdating = False

然后在函数结束时(以及任何错误处理),输入:

Application.Calculation = xlAutomatic
Application.ScreenUpdating = True