在VBA中查找错误行号

use*_*154 6 vba

我正在尝试找到我的代码崩溃的行号,但是这个网站上的许多解释似乎对我的级别来说很复杂.

我的代码基本上如下,我不知道它在哪里打破.

Sub1   
    Call function1  
    Call function2  
End Sub  
Run Code Online (Sandbox Code Playgroud)

该网站上的其他答案似乎只是一个简短的功能.但我不知道在我的代码中调用函数的位置或者如何获取弹出消息.如果我打算将我的sub1代码放入他们的函数中,我也不知道在哪里.初学者在这里.

Mat*_*don 16

如果您的代码没有行号,那么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
Run Code Online (Sandbox Code Playgroud)

但你不想这样做.真的,你不需要行号.

您需要较小的函数来处理运行时错误.

On Error GoTo ErrHandler
Run Code Online (Sandbox Code Playgroud)

发生运行时错误时,执行会跳转到所调用的行标签ErrHandler.

     ...
     Exit Sub
ErrHandler: '<< the line label is denoted with a colon
Run Code Online (Sandbox Code Playgroud)

那个处理程序里面有什么?如果您正在调试,您可能只想在那里Stop执行并检查您的本地人:

    Stop
Run Code Online (Sandbox Code Playgroud)

然后加入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
Run Code Online (Sandbox Code Playgroud)

  • 尽管编程VBA十多年,我还不知道`Erl`.我喜欢Stack Overflow - 你每天都学到新东西. (10认同)
  • 我也是,在 VBA 工作了 5 年,现在只有我在想这个。有一段时间我看到有人的代码用数字标记每一行,并在想为什么 h*** 会有人标记每一行......现在我知道为什么了:D (2认同)