返回列表 上一主題 發帖

[發問] 一個用VBA從網頁取得想要資料的寫法~

[發問] 一個用VBA從網頁取得想要資料的寫法~

本帖最後由 GBKEE 於 2016-1-15 12:59 編輯

麻煩各位大大幫忙,謝謝,感恩~~~~。


請問~~。我想用VBA製作一個BUTTON,當我按下時能從下面網址捉到我指定的資料,並放入excel的儲存格內。該怎麼寫呢!
我只要捉 以下片段的資料
               
                    張數             佔股本比例
董監持股          21,712         6.04%
集保庫存          364,848      101.44%
六日均量          1,834            0.51%  

相關網址
http://jsjustweb.jihsun.com.tw/z/zc/zcx/zcx_6257.asp.htm
http://jsjustweb.jihsun.com.tw///z/zc/zcx/zcxD1.djjs?A=6257"

金害~!我只能捉到它的   個股基本資料
為什麼捉不到我要的資料呢?
Private Sub CommandButton1_Click()
Dim webURL As String
webURL = "URL;http://jsjustweb.jihsun.com.tw/z/zc/zcx/zcx_6257.asp.htm"
With ActiveSheet.QueryTables.Add(Connection:=webURL, Destination:=Range("A1"))
        ' xlOverwriteCells 表示覆蓋欄位
        .RefreshStyle = xlOverwriteCells
                .WebTables = "1"
        .Refresh BackgroundQuery:=False
End With
End Sub

TOP

回復 2# vesperlee


    好像與JAVA有關..國泰也是同樣的網頁,無法匯入 Webtable =1 正確是 2或3
    其它證券有相同的資料,去抓它的來套吧!!!
    其它的要求自己想吧!!

TOP

本帖最後由 white5168 於 2012-5-1 08:37 編輯

股票名稱及代碼是在網頁載入完成後,才用 JavaScript 動態產生的
所以 Web Query 抓不到
因為網頁資料還單純,建議用VBA開啟網頁後複製表格到excel,再選自己要的部份即可
關於股票代碼的部份請自行修改,
對於抓這樣的資料我都是用python,而且速度上也比VBA快很多
PS:寫程式時請記得加入註解,以養成良好的撰寫習慣,也讓後面的人可以方便學習
  1. Sub Test()
  2.     Const url As String = "http://jsjustweb.jihsun.com.tw/z/zc/zck/zck_6257.asp.htm"
  3.     Cells.Clear
  4.     Set ie = CreateObject("internetexplorer.application") '使用此方式可以免除 "設定引用項目"
  5.     With ie
  6.         .Visible = False 'True為開啟ie, False為不開啟ie
  7.         .Navigate url
  8.         Do While .ReadyState <> 4 '等待網頁開啟
  9.             DoEvents
  10.         Loop
  11.         .ExecWB 17, 2 'Select All
  12.         .ExecWB 12, 2 'Copy selection
  13.         Sheets("Sheet1").Cells.Select
  14.         Range("A1").Activate
  15.         ActiveSheet.PasteSpecial Format:="HTML", Link:=False, DisplayAsIcon:= _
  16.                 False, NoHTMLFormatting:=True
  17.     End With
  18.     Columns("A:B").Delete
  19.     ie.Quit
  20.     MsgBox "資料複製結束"
  21. End Sub
複製代碼
這裡比較會有問題看不懂的地方大概就是ExecWB
我附上MSDN的連結,請自行參考 http://msdn.microsoft.com/en-us/library/aa752087(v=vs.85).aspx

TOP

vesperlee
4樓大大 回覆的不是你指定的網頁,請你自行調整即可達成;因非匯入所以格式會不同就是了!!

TOP

回復 4# white5168
回復 2# vesperlee
請試試看!
  1. Private Sub CommandButton1_Click()
  2.     ' Const url As String = "http://jsjustweb.jihsun.com.tw/z/zc/zck/zck_6257.asp.htm"
  3.     Const url As String = "http://jsjustweb.jihsun.com.tw/z/zc/zcx/zcx_6257.asp.htm"     ' 正確的

  4.     Cells.Clear

  5.     Set ie = CreateObject("internetexplorer.application") '使用此方式可以免除 "設定引用項目"

  6.     With ie
  7.         .Visible = False 'True為開啟ie, False為不開啟ie
  8.         .Navigate url
  9.         Do While .ReadyState <> 4 '等待網頁開啟
  10.         DoEvents
  11.         Loop
  12.         .ExecWB 17, 2 'Select All
  13.         .ExecWB 12, 2 'Copy selection
  14.         Range("A1").Activate
  15.         ActiveSheet.PasteSpecial Format:="HTML", Link:=False, DisplayAsIcon:= _
  16.             False, NoHTMLFormatting:=True
  17.     End With

  18.     Columns("A:B").Delete    ' 將匯入時 A、B 兩欄移除, 原本 C:I 的欄位全部左靠, 成為 A:I
  19.     ie.Quit
  20.     MsgBox "資料複製結束"    ' 離開前顯示一小視窗提醒,按它後即結束。
  21. End Sub
複製代碼

TOP

小弟提供另一個方式用xmlhttp來抓取, 然後在自己解析需要的資料
我之前是用在asp上, vba應該也是可以使用的
Function getHTTPPage(ByVal url As String)

Dim objXmlHttp As Object

objXmlHttp = Server.CreateObject("Microsoft.XMLHTTP")
objXmlHttp.Open("GET", url, False)

objXmlHttp.setRequestHeader("Content-Type", "text/html")
objXmlHttp.setRequestHeader("charset", "BIG5")

objXmlHttp.Send()

getHTTPPage = BytesToBstr(objXmlHttp.ResponseBody, "BIG5")

End Function

Function BytesToBstr(ByVal body() As Byte, ByVal CSet As String)

Dim objStream As Object

objStream = Server.CreateObject("ADODB.Stream")
objStream.Type = 1
objStream.Mode = 3
objStream.Open()
objStream.Write(body)
objStream.Position = 0
objStream.Type = 2
objStream.Charset = CSet

BytesToBstr = objStream.ReadText()

objStream.Close()

End Function

TOP

回復 7# arksu
objXmlHttp.Open("GET", url, False) 等模組無法使用,
可能須要再入其相對 DLL,但我對 VBA 不孰,
請問該如何設定?

TOP

回復 8# c_c_lai


我簡單寫了個範例, 您參考一下

excel一開啟就抓取網頁內容用msgbox秀出來

ademo.zip (14.29 KB)

TOP

還是不了解ExecWB 的運作
但是感謝分享!

TOP

        靜思自在 : 有智慧才能分辨善惡邪正;有謙虛才能建立美滿人生。
返回列表 上一主題