2016-04-11 49 views
4

我試圖找到行號,我的代碼崩潰,但在這個網站上的許多解釋似乎很複雜,我的水平。在VBA中查找錯誤行號

我的代碼基本如下,我不知道它在哪裏打破。

Sub1 
    Call function1 
    Call function2 
End Sub 

本網站上的其他答案似乎只是一個簡短的功能。但是我不知道在哪裏調用我的代碼中的函數或如何獲得彈出消息。如果我打算把我的sub1代碼放到他們的函數中,我也不知道在哪裏。初學者在這裏。

+0

你不採取當你按下'Debug'提示上發生錯誤的代碼?也應該是'Sub One()'而不是'Sub1' – newguy

+0

「我的代碼基本上如下」。有什麼理由爲什麼你發佈的東西「基本上」是你的代碼而不是你的實際代碼? –

回答

6

如果你的代碼沒有行號,那麼VBA沒有辦法給你行號

可以寫VBA,使它看起來1980年般的做到這一點:

Sub1 
On Error GoTo 100 
10 Call Function1 
20 Call Function2 
90 Exit Sub 
100 Debug.Print Err.Message & " on line " & Erl 
End Sub 

但你並不想這樣做。真的,你不需要需要一個行號。

您需要更小的功能,處理運行時錯誤

On Error GoTo ErrHandler 

當運行時錯誤發生時,執行跳轉到稱爲ErrHandler線標籤

 ... 
    Exit Sub 
ErrHandler: '<< the line label is denoted with a colon 

那個處理程序是怎麼回事?如果你正在調試,你可能只想Stop執行有和檢查當地人:

Stop 

下一行再加入Resume,然後按F8 一步它。 Resume將返回到導致錯誤的呼叫。如果這是一個函數調用,那麼你需要處理該函數中的運行時錯誤。

確保你永遠不會離開StopResume說明在生產代碼:

Sub WhenWillThisEnd() 
    On Error GoTo ErrHandler 
    Debug.Print 42/0 
    Exit Sub 
ErrHandler: 
    Resume 'jumps back to the line that caused the error 
    Resume Next 'resumes execution on the line right after the one that went boom 
End Sub 
+6

儘管編程VBA已經有十多年了,但我並不瞭解'Erl'。我喜歡Stack Overflow - 你每天都會學到新的東西。 –

+0

我也是,5年在VBA,現在只有我想到這個。曾經有一段時間,我看到某人的代碼用數字標註每一行,並想到爲什麼h ***會有人標出每一行......現在我知道爲什麼了:D – Rosetta