2016-04-11 218 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