2010-01-03 85 views
1

有人可以解釋我這個代碼的含義嗎? 我想它是否發生錯誤轉到ErrHandler部分,但爲什麼在最後有一個簡歷和Exit Sub inbetween?接下來會在vba的代碼結尾代表什麼?

On Error Goto ErrHandler: 
N = 1/0 ' cause an error 
' 
' more code 
' 
Exit Sub 
ErrHandler: 
' error handling code 
Resume Next 
End Sub 

我也寫了一個簡短的代碼,以獲得更好的理解。 如果你在VBA excel中運行它,你將得到4個按順序彈出的數字:1,2,2,4 我理解前兩個數字,但爲什麼是第三個數字2和最後一個數字4? btw對於這個例子沒有發生錯誤。

On Error Goto Err: 
n = 1 
MsgBox n 
Err: 
n = 2 
MsgBox n 
Resume Next 
MsgBox 4 

Resume Next 
End Sub 
+0

,當我改變繼續下一步將繼續進行,我得到了1,然後不停地只得到2秒,相當改變! – excel34 2010-01-03 21:33:22

+1

您將需要在Err之前添加Exit Sub,因爲在實際代碼中,如果沒有錯誤,您不希望錯誤處理代碼運行。如果你想看看上面的代碼發生了什麼,儘管你應該設置一個斷點並使用F8運行代碼來遍歷它。這將允許您查看代碼執行的順序。當沒有錯誤時,繼續和繼續下一步將代碼執行移動到錯誤處理程序的開頭。恢復使您回到錯誤處理程序開始的無限循環,而Resume Next允許您在調用它時繞過它。 – 2010-01-03 22:09:52

回答

1

它在錯誤發生之後的某個點上啓動方法主體的執行。

1

On Error文檔:

指定當發生運行時錯誤,控制轉到該語句立即出現錯誤的語句之後,和執行從該點繼續。

2

已經有人說過Resume Next會在發生錯誤後的那個點執行。還有Resume,它會從導致錯誤的行開始執行,Resume會在指定的標籤處執行。

所以,這是在你提供的代碼發生什麼:

  1. N = 1/0引發零錯誤除法
  2. 執行被移動到ErrHandler標籤。
  3. 錯誤處理代碼將運行,直到它恢復下一步。
  4. 繼續下一步將執行到N = 1/0後的行。既然你回頭看看,你的錯誤處理代碼可能會做這樣的事情,N = 1,否則其餘的代碼將嘗試使用未初始化的N,你將得到另一個錯誤。

以下鏈接提供θ誤差處理一個簡單的解釋和三個簡歷聲明:

http://www.cpearson.com/excel/ErrorHandling.htm

+0

嗨Waleed,如果沒有發生錯誤會發生什麼,下一步需要恢復的效果是什麼? – excel34 2010-01-03 21:30:22

+0

如果您查看您提供的第一個代碼片段,那麼在錯誤處理程序標籤之前有一個「Exit Sub」。如果您沒有遇到錯誤,則此行將退出該過程,而不會運行包括繼續下一個語句在內的任何代碼行。因此,如果沒有錯誤,Resume Next在這裏不執行任何操作。 – 2010-01-03 21:57:34