1.使用Workbooks.Open(網址)
2.使用QueryTable
3.使用XMLHTTP物件
以上一篇文章抓的三大法人買賣超日報為範例
1.workbook.open
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sub test1() | |
Dim t: t = Timer | |
Workbooks.Open Filename:= _ | |
"http://www.twse.com.tw/fund/T86?response=csv&date=20180813&selectType=11" | |
Debug.Print Format(Timer - t, "0.00秒") | |
End Sub |
2.QueryTable
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sub test2() | |
Dim t: t = Timer | |
With ActiveSheet.QueryTables.Add(Connection:="URL;http://www.twse.com.tw/fund/T86?response=csv&date=20180817&selectType=11", Destination:=Range("A1")) | |
.WebSelectionType = xlAllTables | |
.WebFormatting = xlWebFormattingNone | |
.Refresh BackgroundQuery:=False | |
.Delete | |
End With | |
Debug.Print Format(Timer - t, "0.00秒") | |
End Sub |
3.XMLHTTP
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sub test3() | |
Dim t: t = Timer | |
Cells.Clear | |
Dim myXML As Object | |
Set myXML = CreateObject("Microsoft.XMLHTTP") | |
With myXML | |
.Open "GET", "http://www.twse.com.tw/fund/T86?response=csv&date=20180817&selectType=11", False | |
.send | |
myText = convertraw(.responseBody) | |
Debug.Print myText | |
myText1s = Split(myText, Chr(10)) | |
i = 1 | |
For Each myText1 In myText1s | |
myText2s = Split(myText1, """,""") | |
j = 1 | |
For Each myText2 In myText2s | |
Cells(i, j) = Replace(Replace(Replace(myText2, """,", ""), Chr(13), ""), Chr(34), "") | |
j = j + 1 | |
Next | |
i = i + 1 | |
Next | |
End With | |
Set myXML = Nothing | |
Debug.Print Format(Timer - t, "0.00秒") | |
End Sub |
簡單做個比較
1.Workbooks.Open
語法簡單,速度中(1.26秒)
但一個很大的缺點是下載了新的Excel
如果我們平常是將資料固定放在特定Excel檔,只是想更新數據
那麼我們就必須寫入切換活頁簿、使用完後刪掉CSV檔等語法
因此雖然下載的語法簡單,但後面有很多細節要處理
2.QueryTable
語法不難,如果忘記的話直接錄製一次巨集即可得到程式碼,再稍加修改
速度偏慢(2.4秒)
相比於workbook.open
使用QueryTable可將資料直接下載至當前的活頁簿
因此不須另外切換活頁簿
3.XMLHTTP
語法偏難,但速度最快
即使包含了資料整理也僅僅只要0.34秒
但須具備一些網路基礎知識,對於初學者較不易上手
請教我試您的程式,出現myText = convertraw(.responseBody),沒有定義這個Function,或Sub,請指點!
回覆刪除哈囉~此錯誤可能是因為您尚未將convertraw的程式碼加進您的程式碼中
回覆刪除convertraw程式碼在
回覆刪除https://raymondchiendtrt.blogspot.com/2018/08/excel-vba.html
您好:
回覆刪除想請問為什麼我在嘗試下載全產業的時候都會出現問題呢?
例如把網址改成:"http://www.twse.com.tw/fund/T86?response=csv&date=20180817&selectType=ALL"
都會出現錯誤,嘗試過其他寫法也碰到一樣的情況,望大神解惑><
哈囉,請問你是使用哪一種方式,執行後出錯呢
刪除請問上櫃的三大法人買賣超該如何處理?感謝
回覆刪除您好,有緣拜讀到您的部落格文章,我在實作上遇到了一些問題,想要請教您,非常感謝。
回覆刪除我是使用第3種方式,如果只是選單一產業都可正常抓取
但如果是選"全部"(selectType=ALL),就會出現錯誤。
完整網址:https://www.twse.com.tw/fund/T86?response=csv&date=20220906&selectType=ALL
出現錯誤的訊息是
執行階段錯誤 '1004':
應用程式或物件定義上的錯誤
卡在程式的這一行
Cells(i, j) = Replace(Replace(Replace(myText2, """,", ""), Chr(13), ""), Chr(34), "")
感謝您,祝順心
請問RC版主 用 XMLHTTP 抓取 富邦財務比率表格 會將資料同時放在同一儲存格不會換列,但用 QUERY 方法 同樣表格可以分到不同儲存格,請問這是問題出在哪?
回覆刪除