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

謝謝樓主的清楚講解
光樓主提供得學習,看得懂的部份都還沒練到爐火純青,就很多了。
太高深的學問,如果有關鍵字,未來有機會再學習即可。



justinyutw wrote:
因為很像javascript,還想改寫成比較常看到的型式,如下
Jsondata.write ""
但沒辦法執行,請問是否理解錯了。...(恕刪)


(2)
Jsondata.write ”<script>document.JsonParse=function (s) {return eval(’(’ + s + ’)’);}</script>”

重新PO上原本想表達得意思
因為很像javascript,還想改寫成比較常看到的型式,如下
Jsondata.write ”<script> function JsonParse(s) {return eval(’(’ + s + ’)’);}</script>”

不過我試過,似乎沒辦法。因為一般看到的Javascript 都是寫成這種型式,所以也想試試這種寫法。
這樣的寫法真的不行嗎?因為直覺上就是會想這樣寫。


justinyutw wrote:
document.JsonParse=function (s)……… (整行)
是利用vba 中的 htmlfile物件,寫入javascript,做出一個名稱叫jsonparse的function...(恕刪)


Javascript 因為要看懂原始碼,有買書來看,大概try一下指令而以,因為我只是要能大概看得懂原始碼即可。
雖然在書中還沒找到這樣的寫法,不過樓主解釋得非常清楚。

justinyutw wrote:
因為很像javascript,還想改寫成比較常看到的型式,如下
Jsondata.write ”<script> function JsonParse(s) {return eval(’(’ + s + ’)’);}</script>”...(恕刪)


這需要配合 Microsoft Script Control
不過語法不太一樣,eval可以直接用,function 要用addcode
Set test= CreateObject("scriptcontrol")
test.Language = "JScript"

test.eval "var obj=(" & ResponseText & ")"
or
test.Eval("(" + ResponseText + ")")
or
test.AddCode "function getvalue ... ... "

詳細請 google CreateObject("scriptcontrol"),範例很多
(只適合 excel 32位元,64位元需另外寫一堆程式碼,才能正確引用)


snare wrote:
這需要配合 Microsoft...(恕刪)


感謝樓主的講解
請教一下 #223 GettpexHtml

(1)




圖片中,方法1和方法2的執行完全不一樣。
但由Input的原始碼看不太出來使用方法1和方法2是不一樣的情況
當初在找設定時,在這花了很多時間,才發現其實內部執行有不一樣的地方
請問一下要怎麼從HTML上分辦出這樣的區別

(2)
請問一下,
方法1,
程式修改部份
Url = "http://www.tpex.org.tw/web/stock/statistics/monthly/st42.php?l=zh-tw"
.send "input_stock_code=" & stock_id

執行後,貼上Excel的資料,竟然是原始碼!
原以為貼上Excel是如下圖,整個網頁


但實際上是只有原始碼如下圖



方法2,
就是原本程式的寫法,下載的就僅是網頁Table的資料而以。
但如果以方法1來看,不是應該也是貼上原始碼嗎?

(原本以為是貼上原始碼內 Network 的 Preview 看到的網頁,但看來似乎不是)
justinyutw wrote:
但由Input的原始碼看不太出來使用方法1和方法2是不一樣的情況
當初在找設定時,在這花了很多時間,才發現其實內部執行有不一樣的地方
請問一下要怎麼從HTML上分辦出這樣的區別
...(恕刪)


這2個方式,分別跑到2個網址去處理
從原始碼中可知

按enter的網址


滑鼠點擊的網址


要怎麼分辨出區別…?
我只要按f12,打開原始碼大概看一下就知道了,我不知道要如何說明

如果看不懂,最簡單的就是用一些工具軟體,例如比較知名的Fiddler
2個方式都點一下,看看攔截到什麼


請詳說明請google fiddler,教學多到爛了

我個人長久以來都比較喜歡利用手邊現成的工具來做事,像是ie的f12(開發者工具)
這樣就算遇到突發狀況,例如,在身邊什麼都沒帶、電腦不能裝軟體,都有辦法解決一些問題
建議不要學我這樣虐待自己



justinyutw wrote:
程式修改部份
Url = "http://www.tpex.org.tw/web/stock/statistics/monthly/st42.php?l=zh-tw"
.send "input_stock_code=" & stock_id

執行後,貼上Excel的資料,竟然是原始碼!
原以為貼上Excel是如下圖,整個網頁

...(恕刪)


因為這個網址傳回的是“整個網頁的原始碼
html+一大堆程式碼,對excel來說,就是一大串文字,只是單純文字的複製、貼上


justinyutw wrote:
就是原本程式的寫法,下載的就僅是網頁Table的資料而以。
但如果以方法1來看,不是應該也是貼上原始碼嗎?
...(恕刪)


不是的,因為下載的是"標準的html表格"
沒有程式碼,很乾淨的html table
就像手動在網頁選好資料,再複製、貼上一樣

您可以把方法1程式碼改成這樣,再貼上比較看看
.PasteSpecial NoHTMLFormatting:=False


justinyutw wrote:
(原本以為是貼上原始碼內 Network 的 Preview 看到的網頁,但看來似乎不是)
...(恕刪)

preview是解析、跑過程式的,當然會看到正常的網頁
跟responsetext是不一樣的


justinyutw wrote:
當初在找設定時,在這花了很多時間,才發現其實內部執行有不一樣的地方
...(恕刪)


既然不一樣,那為什麼我只選其中一個網址,簡單說明一下

原因有2
1、資料量的不同(大約差16倍),可節省程式下載、處理的時間
2、資料乾淨,好處理

按enter的網址



滑鼠點擊的網址


不好意思版大我想請問一下

如果我要兩個網址一起放在同一個vba裡面是可以的嗎?

例如 : A網址的資料 跟 B網址的資料放在一起然後一起顯示在同一個工作表裡面

clothk73713 wrote:
如果我要兩個網址一起放在同一個vba裡面是可以的嗎?

例如 : A網址的資料 跟 B網址的資料放在一起然後一起顯示在同一個工作表裡面...(恕刪)


廻圈多跑幾次,注意資料放的位置,就可以了
(本樓的範例,很多都是下載2個網址以上)


另外,從您最近發問的問題來看,我認為您需要先加強一下基礎

"點我去博客來找幾本書"

"點我去金石堂找幾本書"
好的 謝謝版大 我真的是個新手

但是對VBA滿有興趣的 謝謝版大的回答
正想說昨天yahoo的資料還抓得下來,
怎麼今天就不行了,
掃到506樓確定是yahoo又改版了,
只是這次table不是在附近,
難怪找不到,
終於又可以工作了,
謝謝Snare大的提醒。
不過這次Yahoo的改版是把報價放到nested table中,
請問該如何解決?

查了網路,好像要多寫蠻多codes的…
蔬食抗暖化,減碳救地球!
nijawang wrote:
查了網路,好像要多寫蠻多codes的…...(恕刪)


不需另外多加程式碼,修改方式一樣
請參考506樓的提示
簡易版請參考21樓範例
關閉廣告
文章分享
評分
評分
複製連結
請輸入您要前往的頁數(1 ~ 144)

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