3

複数の SQL クエリを実行するための簡単な VBA コードを作成しました。結果はExcelシートに送られるはずです。問題は、手順が完了するまでに時間がかかることです。実際、これらのクエリを 1 つずつ実行する方がはるかに高速です。どなたか高速化する方法を教えてください。

これが私のコードです:

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 などの名前が付けられます (すべて機能します)。

そのようなクエリを 2 つ実行したときは問題なく動作しましたが、15 を起動すると... マクロは動作を終了しませんでした。各 SQL スクリプトの実行には数秒かかるため、すばやく動作するはずです。

より速く動作させるにはどうすればよいですか? 助けてください!

どうもありがとう!M.

4

1 に答える 1

3

通常、Excelの速度が低下するのは、画面の更新と再計算が頻繁に行われることです。セルの内容を変更するたびに、画面が再計算されて更新されます。大きな挿入では、これは実際に操作を遅くします。幸い、これをオフにすることができます。

関数の上部に次のように入力します。

Application.Calculation = xlManual
Application.ScreenUpdating = False

次に、関数の最後(およびエラー処理)に次のように入力します。

Application.Calculation = xlAutomatic
Application.ScreenUpdating = True
于 2012-10-09T23:05:51.277 に答える