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

bioleon69 wrote:
這個雖然是可以實現,但是會另外開了一個workbooks
要如何可以在同樣的工作表裡?...(恕刪)


我幾乎不用這個功能,不想寫,所以自己看

裡面有範例
Workbooks.Open 方法 (Excel)
https://msdn.microsoft.com/zh-tw/library/office/ff194819.aspx

bioleon69 wrote:
這個網址就又會變亂碼,很奇怪,明明是同類型檔案...(恕刪)


同類型,不代表編碼一樣
(ANSI)
http://www.tpex.org.tw/storage/bond_publish/ISSBD5.csv

(UTF-8)
https://smart.tdcc.com.tw/opendata/getOD.ashx?id=2-8

如果用xmlhttp,簡單一點的就是多加一個 if

if 這個網址會亂碼=true then
csvstring = convertraw(.ResponseBody)
else
csvstring = .Responsetext
end if

要不然,開csv就全部用 Workbooks.Open 代替就好了,雖然不穩、慢了點
snare wrote:
我幾乎不用這個功能...(恕刪)


XD,MSDN沒有說怎麼開在同個工作表耶
傷腦筋
-------------------

師傅師傅~
目前小弟融合你的寫法,慢慢練習抓取
成功下載數據了,BUT
雖然成功可以運作,但有疑問...
程式碼我用"F8逐行"執行,是可以成功寫入
BUT
一旦直接執行整個程式碼,就會寫入失敗?
(F8逐行可以,整個執行卻是失敗)

我就在想是不是程式運作太快速了?
所以就亂加了
Application.Wait (Now + TimeValue("00:00:02"))
這一段在裡面
之後呢,程式便能成功直接執行也可以寫入了
雖然狀況解除,可以寫入了.
但感覺怪怪的?我這一整段程式碼是不是哪裡有問題?
照道理說,就算再快也不應該出現不能成功寫入的錯誤才對?

以下,完全是融合您的寫法
行列i,j
set nothing 全都你教的



Sub test()
Dim Ie
Set Ie = CreateObject("InternetExplorer.Application")
With Ie
.Navigate "http://mops.twse.com.tw/mops/web/t56sb21_q3?encodeURIComponent=1&run=Y&step=1&TYPEK=otc&year=106&smonth=05&emonth=05&sstep=1&firstin=true"
'.Visible = True
Do Until .readyState = 4
DoEvents
Loop

Set cc = .Document.body
Application.Wait (Now + TimeValue("00:00:02")) '這段加入之後,程式才可以正常寫入
Set tb = cc.all.tags("table")(12).Rows
' Debug.Print tb.innertext

With ActiveSheet
.UsedRange.Clear

For i = 0 To tb.Length - 1
For j = 0 To tb(i).Cells.Length - 1
.Cells(i + 1, j + 1) = tb(i).Cells(j).innertext '逐一寫入
Next
Next
End With
End With
Ie.Quit
Set Ie = Nothing
Set cc = Nothing
Set tb = Nothing
End Sub
bioleon69 wrote:
XD,MSDN沒有說怎麼開在同個工作表耶
傷腦筋
...(恕刪)



bioleon69 wrote:
一旦直接執行整個程式碼,就會寫入失敗?
(F8逐行可以,整個執行卻是失敗)

我就在想是不是程式運作太快速了?
所以就亂加了
Application.Wait (Now + TimeValue("00:00:02"))
...(恕刪)


不是太快,是太慢
因為您用了CreateObject("InternetExplorer.Application")
這個會先打開ie(預設瀏覽器)後,再抓資料,所以ie如果反應太慢,程式就會出錯
有時候電腦如果太慢,有可能要增加等待秒數


bioleon69 wrote:
完全是融合您的寫法
...(恕刪)


CreateObject("InternetExplorer.Application")
這不是我教的…

snare wrote:
CreateObje...(恕刪)

感謝感謝,原來是這樣子
太快太慢太快太慢,分不太清楚啊
既然這樣 那就設5秒吧!最穩!
謝謝師父提示!!~~
snare wrote:
我幾乎不用這個功能,不想寫,所以自己看

裡面有範例
Workbooks.Open 方法 (Excel)
https://msdn.microsoft.com/zh-tw/library/office/ff194819.aspx


不好意思,師父
小弟處理好了,解決了
怕你如果需要
提供給您一下小弟的程式碼
不用跟我客氣了



Sub 插入UTF8後刪除()
Dim sh As Worksheet
ActiveSheet.Select
tabname = "解決了"
For Each sh In Worksheets
If sh.Name = tabname Then Exit Sub
Next

ControlFile = ActiveWorkbook.Name
Workbooks.Open Filename:="https://smart.tdcc.com.tw/opendata/getOD.ashx?id=2-8"
ActiveSheet.Name = tabname
Sheets(tabname).Copy After:=Workbooks(ControlFile).Sheets(1)
Application.DisplayAlerts = False
Workbooks("getod.ashx").Close '開啟後的名稱
Application.DisplayAlerts = True
End Sub
bioleon69 wrote:
怕你如果需要
提供給您一下小弟的程式碼
不用跟我客氣了...(恕刪)


如果是給別人學習的話,我會認為很好

如果是要給我學習…,嗯~不知道該說什麼了


bioleon69 wrote:
Sub test()
Dim Ie
Set Ie = CreateObject("InternetExplorer.Application")
With Ie
.Navigate "http://mops.twse.com.tw/mops/web/t56sb21_q3?encodeURIComponent=1&run=Y&step=1&TYPEK=otc&year=106&smonth=05&emonth=05&sstep=1&firstin=true"...(恕刪)


還有這個網址的表格,因為都是 java 產生的資料
所以用xmlhttp,正常的方式下,會抓不到原始碼
只會抓到一大堆.js的程式

而且這個網頁,按產生新視窗,檢查原始碼是一片空白,什麼資料都看不到
我想這大概就是您突然改用CreateObject("InternetExplorer.Application")的原因
雖然簡單,但缺點就是慢

其實xmlhttp,還是可以抓到有資料的原始碼



不過,用xmlhttp抓“純java網頁”的方式,我暫時保留
目前沒興趣寫教學

snare wrote:
還有這個網址的表格,...(恕刪)


師父 真是高冷
沒關係 簡單的方法 可以執行 即可
請教高手(可以叫師傅嗎?)
弟子對於VBA完全外行,想要透過VBA抓取網站資訊到excel之後,
簡單整理成為自己想要的資訊:
(1)目標網站:台灣股市資訊網.
(2)想抓取的資訊(個股)
1.資產負債表.
2.損益表.
3.現金流量表
4.財務比率表
5.基本資料
6.股利政策.
找了幾本書及線上課程,不知那一本書或者課程比較適合,謝謝指導.
(1)程式交易:平台開發方法與實務(第二版)
(2)Excel VBA一點都不難:一鍵搞定所有報表
(3)别怕,Excel函数其实很简单2
(4)進擊函數VBA,微軟MVP讓你效率翻倍!
或者高手(師傅)您有其他的書籍或者課程建議.
感謝!
akirachin wrote:
(1)目標網站:台灣股市資訊網.
(2)想抓取的資訊(個股)
1.資產負債表.
2.損益表.
...(恕刪)

這個網站仔細看我的範例就可以了(從21樓開始看),56樓請跳過,目前沒興趣寫文章
程式碼也只需改網址、table,2個地方而己,不用特殊技巧
美觀方面,請自行另加程式碼處理
其它資料,請自行修改網址、table即可

中鋼
1.資產負債表.



2.損益表.



akirachin wrote:
找了幾本書及線上課程,不知那一本書或者課程比較適合,謝謝指導.
...(恕刪)

akirachin wrote:
其他的書籍或者課程建議
...(恕刪)


不好意思,程式設計能力是dos時代打下的基礎
專長是組合語言,vb只是打發時間用的
從window時代開始,就沒在看書、上課,所以不知道那個比較好
您可能要問問別人
akirachin wrote:
請教高手(可以叫師傅...(恕刪)


---

你的需求 這一樓裡面很多現成的程式碼
(樓也蓋一年了,累積不少資訊,我也狂問XD,師傅人不錯,只是高冷了點)
可以直接套用
書裡面的內容,遠遠不及自己實作學得快
小弟淺見.加油


另外,拜師要排隊的

網站的話
http://club.excelhome.net/forum.php
可以到這裡看看~



文章分享
評分
評分
複製連結
請輸入您要前往的頁數(1 ~ 158)

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