2012-10-09 84 views
3

我寫了一個簡單的VBA代碼來運行多個SQL查詢。結果應該是excel表格。問題是程序需要時間才能完成!事實上,一個接一個地運行這些查詢會快得多。任何人都可以請告訴我如何使其工作更快?使用VBA運行多個SQL查詢(Oracle) - 爲什麼這麼慢?

這裏是我的代碼:

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腳本需要幾秒鐘才能運行,所以它應該快速運行。

我該如何讓它工作得更快? 請幫忙!

非常感謝! M.

+0

有沒有可能是你在Excel中達到行限制?如果您使用的是2003年,則限制爲65k行。 – Jim

+0

單獨檢查每個查詢。代碼中沒有任何內容表示它會掛起 – Pynner

+0

感謝您的評論。 @Pynner查詢工作 - 我手動檢查他們,他們都很好。當我只運行其中兩個時,它運行得很好,當有更多問題時會出現問題 - 比如10個左右。 – Maciej

回答

3

通常,減慢Excel的速度是不斷的屏幕更新和重新計算。無論何時更改單元格的內容,都會重新計算並刷新屏幕。在大插入時,這確實會降低操作速度。幸運的是,你可以關閉它。

在你的函數的頂部,放:

Application.Calculation = xlManual 
Application.ScreenUpdating = False 

然後在你的函數的結束(和任何錯誤處理),提出:

Application.Calculation = xlAutomatic 
Application.ScreenUpdating = True 
+0

謝謝克里斯!我忘了這件事。剛剛添加,我將運行檢查並查看如果有幫助 – Maciej

+0

不幸的是,這還不夠,仍然有15個腳本宏從未停止運行:( – Maciej

+0

我注意到記錄集的大小有所不同 - 如果從特定查詢返回很多行 - 這是在這裏宏會「掛起」我有「Set rs = Nothing」,但也許我應該添加其他東西?其他的事情是,我有「設置rs =新的ADODB.Recordset」只有一次,頂部 - 也許它應該是添加之前每個查詢 - 可以有所作爲? – Maciej