返回列表 上一主題 發帖

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

回復 3# gelai01000001
CreateObject("InternetExplorer.application") 多搜尋一下會多了解的
  1. With CreateObject("InternetExplorer.application")
  2.     '歷史行情 預設為一個月資料,日期的更改需在網頁上更改
  3.         .Navigate "http://www.cnyes.com/twstock/ps_historyprice/" & Code & ".htm"  'IE的網址
  4.         '.Visible = True
  5.         Application.StatusBar = Code & " 歷史行情 等候中..."
  6.         Do While .Busy Or .ReadyState <> 4     '等候網頁資料下載完成...
  7.              DoEvents
  8.         Loop
  9.         Set A = .Document.getelementsbytagname("input")  '網頁中成員 tagname為 "input"
  10.         A(5).Value = d_Start    '0 開始算起第6個 => 5     開始日期
  11.         A(6).Value = d_End      '0 開始算起第7個 => 6     結束日期
  12.         A(7).Click              '0 開始算起第8個 => 7     按下查詢鍵
  13.         T = Time
  14.         Do
  15.             DoEvents
  16.         Loop Until Time > T + #12:00:08 AM#              '按下查詢鍵後,需等候網頁資料下載完成
  17.         Set A = .Document.getelementsbytagname("table")(1) ''0 開始算起第2個 => 1
  18.         '網頁中成員 tagname為 "table" ,為資料所在的位置.
  19.         Application.StatusBar = Code & " 歷史行情 下載中..."
  20.         Cells(2, 1) = .Document.getelementsbytagname("span")(79).innertext  'innertext: 文字
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

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# gelai01000001
下載3年歷史股價的資料
  1. Option Explicit
  2. Sub 鉅亨網_歷史行情()
  3.     Dim Sh As Worksheet, Code As String, d_Start As String, d_End  As String
  4.     Dim A As Object, i As Integer, c As Integer, T As Date
  5.     Code = InputBox("輸入股票代號 :  ", "股票代號", 2303)
  6.     d_End = InputBox("輸入結束日期 :  ", "結束日期", Date)
  7.     If Len(Code) <= 3 Or Not IsDate(d_End) Then Exit Sub
  8.     Set Sh = ActiveSheet
  9.     With Sh
  10.         .UsedRange.Clear
  11.         .[a1] = Code
  12.         .[b1] = DateAdd("yyyy", -3, d_End)  '下載3年歷史股價的資料
  13.         .[C1] = d_End
  14.         Code = .[a1]
  15.         d_Start = Format(.[b1], "yyyy/mm/dd")
  16.         d_End = Format(.[C1], "yyyy/mm/dd")
  17.     End With
  18.     With CreateObject("InternetExplorer.application")
  19.         .Navigate "http://www.cnyes.com/twstock/ps_historyprice/" & Code & ".htm"
  20.         '.Visible = True
  21.         Application.StatusBar = Code & " 歷史行情 等候中..."
  22.         Do While .Busy Or .ReadyState <> 4
  23.              DoEvents
  24.         Loop
  25.         Set A = .Document.getelementsbytagname("input")
  26.         A(5).Value = d_Start
  27.         A(6).Value = d_End
  28.         A(7).Click
  29.         T = Time
  30.         Do
  31.             DoEvents
  32.         Loop Until Time > T + #12:00:08 AM#
  33.         Set A = .Document.getelementsbytagname("table")(1)
  34.         Application.StatusBar = Code & " 歷史行情 下載中..."
  35.         Cells(2, 1) = .Document.getelementsbytagname("span")(79).innertext
  36.         For i = 0 To A.Rows.Length - 1
  37.             For c = 0 To A.Rows(i).Cells.Length - 1
  38.                 Sh.Cells(i + 3, c + 1) = A.Rows(i).Cells(c).innertext
  39.             Next
  40.         Next
  41.        .Quit
  42.     End With
  43.     Application.StatusBar = Code & " 歷史行情 " & Application.Text(Time - T, "[S] 秒") & " 下載完成"
  44.     MsgBox "OK"
  45.     Application.StatusBar = False
  46. End Sub
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

指定下載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

        靜思自在 : 我們要做好社會的環保,也要做好內心的環保。
返回列表 上一主題