Excel 股市資料抓取服務

提供Excel 股市資料抓取服務
可透過下列方式聯絡我
Email: iamaraymond@yahoo.com.tw
(FB請先加我好友再私訊,不然會跑到陌生訊息)

課程:
Excel VBA 金融資料抓取 | 打造股票研究系統 (學生數: 602,學員評價5顆星)
無痛起步-Excel VBA超入門實戰(學生數: 413,學員評價5顆星)


2018年5月14日 星期一

VBA錯誤處理流程(全圖解)

Excel VBA 網路資料蒐集 完整教學:
https://raymondchiendtrt.blogspot.com/2018/08/vba_22.html

一般來說,當我們的程式執行起來沒有錯誤時,可以直接執行到底





但如果不小心有個錯誤時,就會啟動「錯誤處理機制」
那這時候,我們有3個方式來處理錯誤
1.on error resume next
2.on error goto [line]
3.on error goto 0

1.on error resume next

若使用on error resume next的話,當出現錯誤時,雖然錯誤處理機制會啟動,但會馬上關閉,就像甚麼事都沒發生一樣繼續執行下一行,完全不會跳出錯誤訊息框

2.on error goto [line]



當使用這個語法時,若遇到錯誤就會跳到指定的位置,但要注意的是,此時錯誤機制並未關閉!!,也就是說,雖然程式可以繼續執行,但錯誤機制仍然是啟動中,所以萬一不小心又出錯。。。



這個時候,他就會直接跳出錯誤訊息框,並暫停程式,這也是許多人會很困惑的地方,比如很多人常把on error goto [line] 的語法寫進迴圈中:

Sub test11()

For I = 1 To 3
continue:
    On Error GoTo myErr
    k = 0 / 0
Next
myErr:
k = 1
GoTo continue
End Sub

第一次執行時,可以成功跳轉到myErr,但第二次就不行了,原因就是此時錯誤機制已經啟動,在錯誤機制已經啟動時,即使你加了on error resume next 也一樣會跳出錯誤訊息框

Sub test12()

For I = 1 To 3
    On Error GoTo myErr
    k = 0 / 0
Next

myErr:
On Error Resume Next
I = 0 / 0

End Sub

那要如何把錯誤機制關閉呢?
這時有3個方法
(1)resume:關閉錯誤機制並回到出錯的那一行


(2)resume next:關閉錯誤機制並回到出錯的下一行


(3)on error goto -1:關閉錯誤機制並繼續執行下一行

所以當錯誤機制被關掉時,若再次遇到錯誤就可以繼續用前面所說的3個方式來處理錯誤

3.on error goto 0


on error goto 0會關閉錯誤機制,但跳出錯誤訊息框

那這時大家可能就會很疑惑:
Q:既然on error goto 0會直接跳出錯誤訊息框,為什麼還要使用這個語法呢?
A:因為有時候必須用這個語法來取消on error resume next 的功能

EX:曾有人問過如果我想要前十行可以跳過錯誤,但過了這十行要能跳出錯誤訊息框,要怎麼做呢?

Sub Test()

On error resume next
.
.
.
On error goto 0

End Sub

因此這時候就需要這個語法來取消on error resume next


補充篇:如何處理錯誤?




參考資料
http://club.excelhome.net/thread-503926-1-1.html
http://club.excelhome.net/forum.php?mod=redirect&goto=findpost&ptid=99895&pid=4506304
http://club.excelhome.net/thread-255631-1-1.html
http://yes.nctu.edu.tw/vb/9_Misc/%E5%8F%AF%E8%99%95%E7%90%86%E7%9A%84%E9%8C%AF%E8%AA%A4.htm

沒有留言:

張貼留言