標題:
[發問]
請教高手, 執行階段錯誤1004, 及迴圈越執行越慢的問題
[打印本頁]
作者:
jer92jer
時間:
2013-1-27 11:04
標題:
請教高手, 執行階段錯誤1004, 及迴圈越執行越慢的問題
站內各位高手大家好,
我自己寫一個VBA, 要顯示 證交所 買賣日報表 的資料,
因為要抓很多支上市的股票, 所以 用迴圈處理, 發生2個問題, 也作了很多功能都解決不了,
問題1: 不定時 會中斷, 每次都卡在 抓網頁的 語法的最後一行 .Refresh...
但每次顯示停住的視窗, 我 按"偵錯" 再按 F5 繼續, 就又可以繼續顯示, 但總不能每次都卡住再去按..
問題2: 因為要抓 幾百支的股票, 所以 迴圈執行到後面, 會越顯示越慢, 可能前 1~100支股票, 只要花 30分鐘, 但到後面 花的時間是好幾倍
我自己試過的方式
1. delete 剛查過的table, 好像沒用
2. 加 on error resume next , 是可以, 但 原本會卡住的那支股票的TABLE 就會跳過, 不顯示
3. 加 delay, 要加到 delay 10, 好像 才可以 不卡住, 但這樣好像不是可靠的解法
請各位高手, 能否 高知小弟, 如何解決, 非常感謝! ^_^
[attach]14074[/attach]
作者:
Jevon
時間:
2013-1-27 19:04
根據我的經驗, 像yahoo的網頁如果用迴圈去跑資料的話,
對方的sever有時會認為遭受攻擊而中斷訪問,
證交所舊的網頁好像也是如此.
除非像您第3點所說的加入"delay".
但又因為有on error.., 還是很容易漏掉一些資料的.
至於愈跑愈慢, 釋放記憶體看會不會有幫助.
如果可以的話, 最好從交易總表下手, 跑迴圈真的不穩且很花時間...
作者:
jer92jer
時間:
2013-1-27 21:16
to Jevon 大大,
你指的釋放記憶體是指哪個?! 可以建議一下嗎?!
我自己試了
1. 若將查詢結果 存檔, 都有作以下前後必要的動作
Set oXL = CreateObject("Excel.Application")
Set oWB = oXL.Workbooks.Open(myNewName, True)
....
oWB.Close
oXL.Quit
Set oWB = Nothing
Set oXL = Nothing
2. 在 querytable 後, 也作過 馬上加 以下的CODE
For i = 1 To ActiveWorkbook.Connections.Count
ActiveWorkbook.Connections.Item(1).Delete
Next i
還是沒有用..
執行越來越慢, 我想這個與 server 較無關, 因為我自己試過
1. 全部 八百多筆資料一次跑完 的總時間A
2. 每跑100筆, 就關掉excel, 再跑下一個100筆, 分8次執行, 總時間B
總時間B 遠遠 < 總時間A
所以應該是釋放記憶體的問題造成, 但就不知哪裡出錯,
希望站內各位高手, 給點意見, 自己作很多功課, 但好像還是找不到關鍵點
謝謝!
作者:
Jevon
時間:
2013-1-27 22:59
回復
4#
jer92jer
To jer92jer 兄,
首先要說, 在這兒我一點都不大, 只是興趣+簡化工作的需求,
會找些類似的例子加以修改來用, 嚴格說VBA連基本功都沒打好...,
反觀這裡臥虎藏龍的高手實在很多, 由他們針對您的Code加以診斷,
一定能很快地找出癥結所在, 會比我憑空想像強得多.
因為我本身也有用Excel連結外部資料來追蹤自己的投資組合,
您所困擾的問題讓我有些似曾相識的感覺, 因此野人獻曝而已...
如果不是記憶體占用的問題, 請再看看
(1) 工作表/活頁簿內是否有複雜或大量的公式或連結-先關閉重算功能
(2) 名稱定義的部分是否過多-我之前就曾發生過, 嚴重影響速度
提供您參考...
作者:
jer92jer
時間:
2013-1-30 21:03
自己再推一下,
能有高手出手指導嗎?!
感恩丫!
歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)