2016-11-09 30 views
1

這是一個非常繁瑣的問題:我在Excel VBA中的For To循環中插入錯誤處理程序;我希望循環的內容縮進,使得:Excel VBA中的錯誤處理程序的縮進

For i = 0 to n 
    On Error GoTo ErrorHandler: 
     '~~> code here 
    ErrorHandler: 
     '~~> code here 
     Resume NextLoop 
    NextLoop: 
Next 

但是,Excel VBA自動取消錯誤處理程序的縮進:

For i = 0 to n 
    On Error GoTo ErrorHandler: 
     '~~> code here 
ErrorHandler: 
     '~~> code here 
     Resume NextLoop 
NextLoop: 
Next 

我曾試圖取消選擇選項「自動縮進」中的「工具「>」選項「>」編輯器「,但這沒有奏效。

我該如何避免這種情況?

+2

您無法控制Excel中標籤的縮進。它默認並固定在左邊。原因是爲了讓他們更容易發現 –

+0

我見@Victor Moraes。有什麼辦法可以繞過這個嗎? –

+0

我真的不知道,但我可以問你爲什麼要這樣做,除了「我認爲這樣更漂亮」? –

回答

1

使用GoTo Label的代碼可能是理解和獲得無錯的噩夢。我知道的唯一情況是GoTo Label可能是合適的,這是一個致命的錯誤退出,無意返回。跳出一個錯誤並嘗試跳回來是非常困難的,當你在幾個月內回到它時很難理解。

您的代碼中是否有多條語句可以引發錯誤?如果是這樣,錯誤處理程序如何知道它正在處理哪個錯誤?

我贊成:

On Error Resume Next    ' Suspend normal error handling 
Statement that might throw an error 
On Error GoTo 0      ' Restore normal error handling 
If Err.Number <> 0 then 
    ' Code to handle error 
End If 

Err.NumberErr.Description值會告訴錯誤是什麼,讓寫特定的錯誤處理代碼。

有人認爲,採取錯誤處理的主要代碼保持主代碼清潔。這個論點有一些優點。如果有幾十個潛在的錯誤,分析可能變得複雜,並且難以分離正常路徑。但是,根據我的經驗,這是非常不尋常的。也許,你有一些文件列表可能無法打開。文件打開的原因有很多,但是你的代碼對它們無能爲力。它只能顯示Err.Description並移至下一個文件。