strainny wrote:
可以請教s大的即時運算內容是print哪個參數嗎,我試著debug.ptint一直出錯,一直不會找目前下載的資料在哪,要的資訊存在哪個對應的位置@@
vba 在 .send 下面設中斷點,而這時資料下載到 responsetext 或 轉成html物件
因為程式暫停了,所以可以在即時運算視窗,使用一些其它程式碼先測試
至於參數,以chrome為例,
一、先使用程式碼中的網址打開網頁
二、在想要的資料位置,按滑鼠右鍵,選檢查
三、在檢查的視窗中,移動滑鼠,可以看到網頁有明顯變化,找出資料範圍
四、此範例為表格,找到表格的id
五、少量資料可在即時運算視窗中,測試
注意:即時運算視窗,有字數、編碼的限制。字太多、亂碼,請改放到工作表內測試
snare wrote:
因為yahoo股市改...(恕刪)
前輩,打擾一下
我有看到這一頁,然後也有把YAHOO的連結修正,但是還是沒有辦法即時更新股價
所以很冒味的直接向您請教下面原先的碼要怎麼修正才能夠正確的去捉取更新的股價資料呢?
Sub Z及時股價()
Dim myXML As Object
Set myXML = CreateObject("Microsoft.XMLHTTP")
Dim myHTML As Object
Set myHTML = CreateObject("HTMLFile")
On Error Resume Next
i = 2
With myXML
Do While Cells(2 + QQ, 1) <> ""
.Open "GET", "https://tw.stock.yahoo.com/q/q?t=" & Timer & "&s=" & Cells(2 + QQ, 1), False
'以下這3行避免抓到暫存資料
.setRequestHeader "Cache-Control", "no-cache"
.setRequestHeader "Pragma", "no-cache"
.setRequestHeader "If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT"
.send
'把傳回值轉成標準htmlfile
myHTML.body[removed] = .responseText
Set myTable = myHTML.getElementsByTagName("table")(6)
For j = 1 To 10
Cells(i, j + 1) = myTable.Rows(1).Cells(j).innerText
Next
i = i + 1
'將股票代號導入CMoney超連結
Cells(2 + QQ, 1).Select
ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:= _
"http://www.cmoney.tw/follow/channel/stock-" & Cells(2 + QQ, 1) & "?chart=d"
QQ = QQ + 1
Loop
End With
'釋放記憶體
Set myXML = Nothing
Set myHTML = Nothing
Var = MsgBox("更新完成", vbOKOnly, "訊息")
End Sub
yahoo股利頁面改版後,無法順利解析JSON,請您指點一下語法修正,部分程式碼如下及VBA截圖(變數視窗DecodeJson反白處無資料)
Set GetXml = CreateObject("WinHttp.WinHttpRequest.5.1")
Set Jsondata = CreateObject("HtmlFile")
'解析json字集函數
‘暫時改為全型字
Jasondata.write"<script>document.JsonParse=function(s){return eval('+s+')');}</script>"
With GetXml
.Open "GET", URL, False
.setRequestHeader "Cache-Control", "no-cache"
.setRequestHeader "Pragma", "no-cache"
.setRequestHeader "If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT"
.send
dtemp = "{""QuoteDividendStore"":{""dividend"":{""data"":[" & Split(Split(.responsetext, """QuoteDividendStore"":{""dividend"":{""data"":[")(1), ",""WaferMarketTimeStore"":")(0) & "}"
Set DecodeJson = CallByName(CallByName(CallByName(Jsondata.JsonParse(dtemp), "QuoteDividendStore", VbGet), "dividend", VbGet), "data", VbGet)
Debug.Print dtemp
語法1為原先程式碼,2為您的修正語法,請問如何從即時視窗中,判斷應作如此的修正?
1.' Set DecodeJson = CallByName(CallByName(CallByName(Jsondata.JsonParse(dtemp), "QuoteDividendStore", VbGet), "dividend", VbGet), "data", VbGet)
修正的語法:
2. Set DecodeJson = CallByName(CallByName(CallByName(CallByName(Jsondata.JsonParse(dtemp), "QuoteDividendStore", VbGet), "dividendByYear", VbGet), "data", VbGet), "dividendByYear", VbGet)
關閉廣告