返回列表 上一主題 發帖

股價代號和起始日期的抓取

指定下載3年歷史股價的資料

麻煩請各位高手專家及版主指導解惑:
下面網址中可指定查詢歷史資料的區間選項(預設值為20天),有先在網站中更改查詢區間為3年。
但每次下載匯入EXCEL的資料只有21天,不知需要加入什麼程式碼才可解決??
www.cnyes.com/twstock/ps_historyprice/6282.htm
  1. Sub Macro1()

  2.     With ActiveSheet.QueryTables.Add(Connection:= _
  3.         "URL;http://www.cnyes.com/twstock/ps_historyprice/6282.htm", Destination:= _
  4.         Range("A1"))
  5.         .RefreshStyle = xlOverwriteCells
  6.         .WebTables = "2"
  7.         .Refresh BackgroundQuery:=False
  8.     End With
  9.     ActiveWindow.SmallScroll Down:=-21

  10. End Sub
複製代碼
因為YAHOO、GOOGLE的歷史資料有時無法顯示例外(開休市)的數據,造成計算MA值的數據不準確。
感謝各位高手專家撥空解惑。

TOP

回復 2# GBKEE

感謝GBKEE版主的熱心用心的解惑。
因位本人不材,不甚了解下列程式碼的語法及執行用意。
還煩請GBKEE版主抽空可說明註解惑指導一下嗎?
  1. With CreateObject("InternetExplorer.application")
  2.         .Navigate "http://www.cnyes.com/twstock/ps_historyprice/" & Code & ".htm"
  3.         '.Visible = True
  4.         Application.StatusBar = Code & " 歷史行情 等候中..."
  5.         Do While .Busy Or .ReadyState <> 4
  6.              DoEvents
  7.         Loop
  8.         Set A = .Document.getelementsbytagname("input")
  9.         A(5).Value = d_Start
  10.         A(6).Value = d_End
  11.         A(7).Click
  12.         T = Time
  13.         Do
  14.             DoEvents
  15.         Loop Until Time > T + #12:00:08 AM#
  16.         Set A = .Document.getelementsbytagname("table")(1)
  17.         Application.StatusBar = Code & " 歷史行情 下載中..."
  18.         Cells(2, 1) = .Document.getelementsbytagname("span")(79).innertext
複製代碼
GBKEE版主:執行程式過程中,發現下載至EXCEL中的資料是有由〈Sh.Cells(i + 3, c + 1) = A.Rows(i).Cells(c).innertext〉而來,
                        不同於下載網頁資料〈WebTables = "number"〉,所用的指令方法。
我有上網收搜尋相關資料,大約清楚知道,上列程式碼式是在VBA程式中啟動網頁的(javascript)指令。
不知是與不是或一知半解!感謝GBKEE的指導。

TOP

如何將下載的股市每日盤後行情(製作成各股的歷史股價資料)

煩請各位高手專家解惑,謝謝!
請問有辦法將下列程碼的加以修改,把每日各股的盤後行情所得的資料轉換成(各股的歷史資料)。
  1. Sub 下載網站資料()
  2.     Dim Startmonth As String, Startday As String, xDate As Date, Msg As Boolean, Sh As Worksheet
  3.     On Error GoTo EX                        '程式執行中有錯誤時跳到 EX: 繼續執行程式
  4.     xDate = Date                            '當日
  5.     Set Sh = ActiveSheet                    '指定工作表:此程式在任何模組中皆可用
  6. EX:
  7.     If Err.Number <> 0 Or Msg = True Then   '當日(尚未有資料:錯誤) 或 休市
  8.         [color=Red]xDate = xDate - 1    (應改為xDate = Date - 1)[/color]     假如休市超過1天以上(2,3,4,5,6,春節9天),又如何修改呢?         
  9.         Err.Clear
  10.         Msg = False
  11.     End If
  12.     Sh.UsedRange.Clear                       '清理工作表已使用的範圍
  13.     Startday = Format(xDate, "YYYYMMDD")
  14.     Startmonth = Format(xDate, "YYYYMM")
  15.         '下載網站的網址
  16.     With Sh.QueryTables.Add(Connection:="URL;http://www.twse.com.tw/ch/trading/exchange/MI_INDEX/genpage/Report" & Startmonth & "/A112" & Startday & "ALLBUT0999_1.php?select2=ALLBUT0999&chk_date=" & Format(xDate, "E/MM/DD"), Destination:=Range("A3"))
  17.         .RefreshStyle = xlOverwriteCells                            '抓取網頁的第10個表格作為匯入資料
  18.         .WebTables = "10"
  19.         .Refresh BackgroundQuery:=False                             '當日(尚未有資料:錯誤)
  20.         If Application.CountA(Sh.QueryTables(1).ResultRange) = 0 Then  '休市 沒有資料
  21.             Msg = True
  22.             GoTo EX
  23.         End If
  24.     End With
  25.     With Sh.UsedRange
  26.         .Font.Size = 12
  27.         .EntireColumn.AutoFit
  28.     End With
  29. End Sub
複製代碼
因為我已有下載各股歷史股價的資料程式和資料,且依代碼分類成多個活頁簿例如:
workbook(1.xls)有worksheet(1102)、worksheet(1103).....等。1活頁簿中有代碼,第一個數字有[1]的多個工作表。
workbook(2.xls)有worksheet(2102)、worksheet(2103).....等。2活頁簿中有代碼,第一個數字有[2]的多個工作表。
......
......
workbook(9.xls)有worksheet(9102)、worksheet(9103).....等。9活頁簿中有代碼,第一個數字有[9]的多個工作表。
所以想請問有沒有更簡便快速的方法。謝謝各位專家前輩的抽空指導。

TOP

        靜思自在 : 多做多得。少做多失。
返回列表 上一主題