Board logo

標題: excel 連接 SQL 2008語法 如何改進 與迴圈 [打印本頁]

作者: joey0415    時間: 2010-6-4 00:32     標題: excel 連接 SQL 2008語法 如何改進 與迴圈

小弟利用EXCEL讀取SQL2008的資料,想要從資料庫中抓出來計算,最後想再按照股票代碼跑迴圈,下面是小弟錄製的代碼,我覺得好像可以更簡單一些,請高手指點一下,當然錄製的代碼是2330,最後2330會用成變數來跑,不知道有人可以讓下面的連接方式更好或更快一些!謝謝


小弟只會這樣寫,當然有高手可以幫小弟改的更漂亮一些
  1. Sub 股票資料1()
  2. '

  3. '

  4.     Sheets("Sheet1").Select
  5.     Range("A1").Select
  6.     With ActiveSheet.QueryTables.Add(Connection:= _
  7.         "ODBC;DRIVER=SQL Server;SERVER=.;UID=sa;PWD=WXYZ1234;APP=Microsoft Office 2003;WSID=CS5111;DATABASE=stock" _
  8.         , Destination:=Range("A1"))
  9.         .CommandText = Array( _
  10.         "select * from (SELECT TOP 12 *  FROM stock.dbo.StockStore WHERE stockid=2330 ORDER BY sdate DESC) AAA ORDER BY sdate")
  11.         .Name = "來自 "
  12.         .FieldNames = True
  13.         .RowNumbers = False
  14.         .FillAdjacentFormulas = False
  15.         .PreserveFormatting = True
  16.         .RefreshOnFileOpen = False
  17.         .BackgroundQuery = True
  18.         .RefreshStyle = xlInsertDeleteCells
  19.         .SavePassword = True
  20.         .SaveData = True
  21.         .AdjustColumnWidth = True
  22.         .RefreshPeriod = 0
  23.         .PreserveColumnInfo = True
  24.         .Refresh BackgroundQuery:=False
  25.     End With

  26. End Sub
  27. Sub 股票資料2()
  28. '

  29. '

  30. '
  31.     Sheets("Sheet2").Select
  32.     Range("A1").Select
  33.     With ActiveSheet.QueryTables.Add(Connection:= _
  34.         "ODBC;DRIVER=SQL Server;SERVER=.;UID=sa;PWD=WXYZ1234;APP=Microsoft Office 2003;WSID=CS5111;DATABASE=stock" _
  35.         , Destination:=Range("A1"))
  36.         .CommandText = Array( _
  37.         " select * from (SELECT TOP 12 sdate,stockid, CreditMoney,CreditTick FROM stock.dbo.CreditExchangeMonth WHERE stockid=2330 ORDER BY sdate DESC) AAA ORDER BY sdate" _
  38.         )
  39.         .Name = "來自 "
  40.         .FieldNames = True
  41.         .RowNumbers = False
  42.         .FillAdjacentFormulas = False
  43.         .PreserveFormatting = True
  44.         .RefreshOnFileOpen = False
  45.         .BackgroundQuery = True
  46.         .RefreshStyle = xlInsertDeleteCells
  47.         .SavePassword = True
  48.         .SaveData = True
  49.         .AdjustColumnWidth = True
  50.         .RefreshPeriod = 0
  51.         .PreserveColumnInfo = True
  52.         .Refresh BackgroundQuery:=False
  53.     End With
  54. End Sub
複製代碼

作者: Hsieh    時間: 2010-6-4 18:31

回復 2# joey0415
查詢已經存在不再使用Add
假設代號是2030~2032
就同一個查詢使之變化
  1. Sub 股票資料1()
  2. For Each MyID In Array("2030","2031",2032")
  3.     With Sheets("Sheet1").QueryTables(1)
  4.         .CommandText = Array( _
  5.         "select * from (SELECT TOP 12 *  FROM stock.dbo.StockStore WHERE stockid=" & MyID & " ORDER BY sdate DESC) AAA ORDER BY sdate")
  6.         .Name = "來自 "
  7.         .FieldNames = True
  8.         .RowNumbers = False
  9.         .FillAdjacentFormulas = False
  10.         .PreserveFormatting = True
  11.         .RefreshOnFileOpen = False
  12.         .BackgroundQuery = True
  13.         .RefreshStyle = xlInsertDeleteCells
  14.         .SavePassword = True
  15.         .SaveData = True
  16.         .AdjustColumnWidth = True
  17.         .RefreshPeriod = 0
  18.         .PreserveColumnInfo = True
  19.         .Refresh BackgroundQuery:=False
  20.     End With
  21. Next
  22. End Sub
複製代碼

作者: joey0415    時間: 2010-6-4 21:40

本帖最後由 joey0415 於 2010-6-4 21:44 編輯

[quote]回復  joey0415
查詢已經存在不再使用Add
假設代號是2030~2032
就同一個查詢使之變化
  1. # Sub 股票資料1()
  2. # For Each MyID In Array("2030","2031",2032")
  3. #     With Sheets("Sheet1").QueryTables(1)
  4. #         .CommandText = Array( _
  5. #         "select * from (SELECT TOP 12 *  FROM stock.dbo.StockStore WHERE stockid=" & MyID & " ORDER BY sdate DESC) AAA ORDER BY sdate")
  6. #         .Name = "來自 "
  7. #         .FieldNames = True
  8. #         .RowNumbers = False
  9. #         .FillAdjacentFormulas = False
  10. #         .PreserveFormatting = True
  11. #         .RefreshOnFileOpen = False
  12. #         .BackgroundQuery = True
  13. #         .RefreshStyle = xlInsertDeleteCells
  14. #         .SavePassword = True
  15. #         .SaveData = True
  16. #         .AdjustColumnWidth = True
  17. #         .RefreshPeriod = 0
  18. #         .PreserveColumnInfo = True
  19. #         .Refresh BackgroundQuery:=False
  20. #     End With
  21. # Next
複製代碼
請問版主,是不是要先執行輸入帳號與密碼的SQL連線設定,才能使用版主的批次設定,請問要如何增加在版主所寫的程式上呢?感謝版主用心回應
作者: Hsieh    時間: 2010-6-4 22:12

你既然已經錄製出來
可見你得查詢已經建立
所以帳號密碼應該都被記錄
你先套用看看是否有達到變化
再針對遇到的問題發問




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)