(不定期更新)使用VBA解決 excel web 查詢無法匯入、匯入太慢的股市資料

snare wrote:
99樓範例,使用舊版股利連結、舊版下載範例,.send 上面多加一行
.setRequestHeader "user-agent", "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.107 Safari/537.36"(恕刪)


真是太神奇了,謝謝

請問樓主,加入這行程式碼在查詢過程是有何功用,使用時機有無規則可遵循?以"https://tw.stock.yahoo.com/d/s/dividend_2303.html"在firefox及chrome所得的網頁為何會不同?能否請樓主簡單教導一下
activer wrote:
請問樓主,加入這行程式碼在查詢過程是有何功用,使用時機有無規則可遵循?


模擬用什麼東西上網,軟體版本…等等
時機不一定,通常要觀察.responsetext回傳的東西決定
(詳細請google User-Agent)

activer wrote:
以"https://tw.stock.yahoo.com/d/s/dividend_2303.html"在firefox及chrome所得的網頁為何會不同?


正常情況下,同網址應該要開出一樣的東西才對
但 yahoo有檢查瀏覽器種類、版本…,跳轉到不同網頁
大概是為了慢慢淘汰舊版ie…那類的,所以最近比較亂

剛剛在pcdvd,也看到有人問yahoo的問題,他還只是單純上網沒抓資料
https://www.pcdvd.com.tw/showthread.php?t=1188078

和我在1069樓,測試出來的問題一樣,改版中的yahoo實在很難用
snare wrote:
模擬用什麼東西上網,軟體版本…等等
時機不一定,通常要觀察.responsetext回傳的東西決定


yahoo雖改版有些變化,但已用多年,習慣了;還好遇到問題,有樓主在這替大家解惑,謝謝
Snare版主好:

我正在嘗試複製您219F-市況報導的程式,目前已經可以成功下載,

我遇到了困難,想取得msgArray下標(紅圈9)的數字,

我試過在DecodeJson、Jsondata,以及Trr1裡去找,

但受限於Variant/Object/JScriptTypeInfo這個型態,當然也無法以UBound的方式取出,

想請教版主,還有沒有什麼辦法取出這個數字,感謝您

Dylan67 wrote:
但受限於Variant/Object/JScriptTypeInfo這個型態,當然也無法以UBound的方式取出


圖太小,看不清楚,也不知道0~9裡面有什麼,有幾層

一樣用callbyname取出,一層一層拆

trr1=CallByName(CallByName(DecodeJson, "msgArray", VbGet), "9", VbGet)
debug.print trr1.???
debug.print callbyname(trr1,"字串注意大小寫",VbGet)



temp=CallByName(trr1, "9", VbGet)
debug.print temp.???
debug.print callbyname(temp,"字串注意大小寫",VbGet)


或使用國外高手寫好的json處理副程式,全部會轉成字串
但是程式碼會多1千多行喔
https://github.com/VBA-tools/VBA-JSON
感謝Snare您的快速回復,是我表達及貼圖得不夠好,真是抱歉,

因為我程式裡有個迴圈,需要引用(紅圈:9)這個下標,

可是我不知道怎麼把這個 9 取出來,等於是陣列的UBound(arr)這個概念,再次感謝

Dylan67 wrote:
可是我不知道怎麼把這個 9 取出來,等於是陣列的UBound(arr)這個概念,再次感謝


debug.print CallByName(CallByName(DecodeJson, "msgArray", VbGet), "length", VbGet)
Dylan67
太棒了,可以用了,謝謝Snare版主,祝假日愉快
請問我寫的程式!
為何出來看不到東西而是一段亂碼?
上網找了一下看不出結果!

---------------------------原程式可顯示----------------------------------

Set book1 = Sheets("查詢")
Set bookshow1 = book1.QueryTables.Add _
(Connection:=URL;本直接放別的較短的網址 _
, Destination:=Range("A12"))

On Error Resume Next
With bookshow1
.WebSelectionType = xlAllTables
.WebFormatting = xlWebFormattingNone
.Refresh BackgroundQuery:=False
.Delete
If Err.Number <> 0 Then Err.Clear: MsgBox "出現錯誤" & vbNewLine & "下載失敗"
End With
---------------------------後改的程式不能顯示----------------------------------
xxx = "" & Range("X9") & ""
Set book1 = Sheets("查詢")
Set bookshow1 = book1.QueryTables.Add _
(Connection:="URL;" & xxx _
, Destination:=Range("A12"))

On Error Resume Next
With bookshow1
.WebSelectionType = xlAllTables
.WebFormatting = xlWebFormattingNone
.Refresh BackgroundQuery:=False
.Delete
If Err.Number <> 0 Then Err.Clear: MsgBox "出現錯誤" & vbNewLine & "下載失敗"
End With
-------------------------------------------------------------

Sheets("查詢").Range("X9")的網址如下:
https://goodinfo.tw/StockInfo/StockList.asp?MARKET_CAT=%E8%87%AA%E8%A8%82%E7%AF%A9%E9%81%B8&INDUSTRY_CAT=%E6%88%91%E7%9A%84%E6%A2%9D%E4%BB%B6&FL_ITEM0=%E9%80%A3%E7%BA%8C%E9%85%8D%E7%99%BC%E5%90%88%E8%A8%88%E8%82%A1%E5%88%A9%E6%AC%A1%E6%95%B8&FL_VAL_S0=0&FL_VAL_E0=&FL_ITEM1=&FL_VAL_S1=&FL_VAL_E1=&FL_ITEM2=&FL_VAL_S2=&FL_VAL_E2=&FL_ITEM3=&FL_VAL_S3=&FL_VAL_E3=&FL_ITEM4=&FL_VAL_S4=&FL_VAL_E4=&FL_ITEM5=&FL_VAL_S5=&FL_VAL_E5=&FL_ITEM6=&FL_VAL_S6=&FL_VAL_E6=&FL_ITEM7=&FL_VAL_S7=&FL_VAL_E7=&FL_ITEM8=&FL_VAL_S8=&FL_VAL_E8=&FL_ITEM9=&FL_VAL_S9=&FL_VAL_E9=&FL_ITEM10=&FL_VAL_S10=&FL_VAL_E10=&FL_ITEM11=&FL_VAL_S11=&FL_VAL_E11=&FL_RULE0=&FL_RULE1=&FL_RULE2=%E7%94%A2%E6%A5%AD%E9%A1%9E%E5%88%A5%7C%7CETF&FL_RULE3=&FL_RULE4=&FL_RULE5=&FL_RANK0=&FL_RANK1=&FL_RANK2=&FL_RANK3=&FL_RANK4=&FL_RANK5=&FL_FD0=&FL_FD1=&FL_FD2=&FL_FD3=&FL_FD4=&FL_FD5=&FL_SHEET=%E8%82%A1%E5%88%A9%E6%94%BF%E7%AD%96%E7%99%BC%E6%94%BE%E5%B9%B4%E5%BA%A6_%E8%BF%91N%E5%B9%B4%E8%82%A1%E5%88%A9%E4%B8%80%E8%A6%BD&FL_SHEET2=%E7%8F%BE%E9%87%91%2B%E8%82%A1%E7%A5%A8%E8%82%A1%E5%88%A9&FL_MARKET=%E4%B8%8A%E5%B8%82%2F%E4%B8%8A%E6%AB%83&FL_QRY=%E6%9F%A5++%E8%A9%A2
機八陽 wrote:
為何出來看不到東西而是一段亂碼?
上網找了一下看不出結果!




那串亂碼,解碼後
=>請勿透過網站內容下載軟體查詢本網站

querytable,不是所有網站都能用,請改用xmlhttp下載

相關範例請參考828樓、1044樓,或其它更早以前的goodinfo下載範例

一、
剪貼薄
getElementById("divStockList")

表格
("table")(98).Rows

二、
Post 改成 GET

三、
不需要 referer

四、
網址用“解碼”後的,中文網址
如使用“編碼”後的,像亂碼的網址,需注意長度問題


機八陽
看了程式828樓~感謝問題解決了!!!
而愛喔喔遏止嗷嗷愛歐歐
文章分享
評分
評分
複製連結
請輸入您要前往的頁數(1 ~ 157)

今日熱門文章 網友點擊推薦!