English Deutsch Français Italiano Español Português 繁體中文 Bahasa Indonesia Tiếng Việt ภาษาไทย
所有分類

懇請各位高手幫忙,因工作有需求~~如何用vba寫一段程式去撈外部sql資料庫的資料使其自動匯到EXCEL,需求是每天會自動在固定時間,如上午三點會自動下載資料,這樣使用者就不用自己用人工的方式去撈資料~~ 不知有沒有哪位高手知道的,懇請和我分享一下,以解燃眉之急,在此贈送點數以表感激。

2006-11-02 18:06:17 · 2 個解答 · 發問者 江小真 1 in 電腦與網際網路 軟體

2 個解答

由於沒有說明SQL資料庫跟Excel檔案架構, 所以在此僅寫出程式核心, 需要自行修改. 在VBA裡新增一模組,貼上以下程式碼.

函數說明:
timer_Start: 啟動定時執行
timer_Stop: 停止定時執行
ConnSQL: 連結SQL資料庫, 取回資料

' 程式開始

' 被定時執行的函數,名稱不可以改
Sub Schedule()
If timer_enabled Then
Call ConnSQL
End If
End Sub


' 啟動排程
Sub timer_Start()
' ========== 在此設定你需要的變數 ==========
runTime = "09:10:00" ' 設定每天執行的時間
' ==========================================

timer_enabled = True
Application.OnTime TimeValue(runTime), "Schedule"
End Sub


' 停止執行
Sub timer_Stop()
Application.OnTime runTime, "Schedule", , False
timer_enabled = False
End Sub


Sub ConnSQL()

' ========== 在此設定你需要的變數 ==========
SQLStr = "SELECT * FROM TABLE1"
ConnStr = "Driver={SQL Server}; DATABASE=MyDB01; SERVER=Server01; UID=User; PASSWORD=Pwd"
' ==========================================

Set conn = CreateObject("ADODB.Connection")
Set rs = CreateObject("ADODB.recordset")
conn.ConnectionString = ConnStr
conn.Open
rs.Open SqlProgList, conn
counter = 0
Do while not rs.eof
counter = counter + 1
For i = 0 to rs.fields.count
Cells(counter, i+1).Value = rs(i)
Next
rs.movenext
Loop

End Sub

2006-11-10 23:32:39 補充:
你要在 SQLStr 變數中定義你自己需要的SQL指令,ConnStr 則要定義資料庫連線。解答中這兩個變數值只是個示範,一定無法執行成功的。

2006-11-23 22:55:13 補充:
抱歉筆誤,
rs.Open SqlProgList, conn
要改成
rs.Open SqlStr, conn
還有
For i = 0 to rs.fields.count
要改成
For i = 1 to rs.fields.count-1

2006-11-03 09:39:04 · answer #1 · answered by 微軟卓越魔人 6 · 0 0

你好阿 我把SQLStr和ConnStr這兩個設好後,執行還是出現rs.Open SqlProgList, conn這一段錯誤,不知道要往哪個方向改會比較正確,謝謝

2006-11-20 15:17:57 · answer #2 · answered by 江小真 1 · 0 0

fedest.com, questions and answers