放羊的狼 发表于 2022-8-18 14:31

如何在vba抛出异常时打印出中断行代码

目前是在每个过程的头部写了on error go line,在末尾加的line:并打印 Err.Number和Err.Description,这样既能不用处处放错误处理又能知道有错误出现,但想更精确一点知道具体是哪行代码出现的问题,这个想法不知道能不能实现,报错时将发生错误的当前行代码打印出来,或者正常运行时打印代码或者尝试判断行号,然后找中断行。感觉可能会用到VBComponents,但具体还没头绪,特此前来求助各位大佬。
Sub tt1()
    Call tt2

    Dim rng As Range
    On Error GoTo 标签1
    rng = "1"
    'Set rng =

标签1:
    Debug.Print "Err.Number:" & Err.Number
    Debug.Print "错误描述:" & Err.Description
    Err.Clear
    Debug.Print "----------------------------------------"
End Sub


Sub tt2()
    On Error GoTo 标签2
    Workbooks.Open ("1")
   
标签2:
    Debug.Print "Err.Number:" & Err.Number
    Debug.Print "错误描述:" & Err.Description
    Err.Clear
    Debug.Print "----------------------------------------"
End Sub

JackLei 发表于 2022-8-18 18:44

不过要实现这个需要自己在前面加行号,比如这样:
他会自动跳出是第六行出错了
Sub TestMacro()
'
' TestMacro Macro
'
On Error GoTo Error_In_Command
'
3   Dim a As Integer

4   a = 10
6   a = a / 0
10    Range("D3").Select
20    ActiveCell.FormulaR1C1 = "Hello VBA"
30    Range("D4").Select
Exit Sub
Error_In_Command:
MsgBox ("Error in line: " & CStr(Erl))
End Sub

as614001 发表于 2022-8-18 17:10

手动调试

放羊的狼 发表于 2022-8-18 17:15

as614001 发表于 2022-8-18 17:10
手动调试

你这话没任何意义,但为表尊重我还是要回复你。

JackLei 发表于 2022-8-18 18:40

-------试试这个---------
On Error GoTo Error_In_Command

Error_In_Command:
MsgBox ("Error in line: " & CStr(Erl))

JackLei 发表于 2022-8-18 18:50

还有一种方法:
'不需要行号.

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

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

   ...
   Exit Sub
ErrHandler: '<< the line label is denoted with a colon
'那个处理程序里面有什么?如果您正在调试,您可能只想在那里Stop执行并检查您的本地人:

    'Stop
'然后加入Resume下一行,然后按F8到步入了.Resume将返回导致错误的调用.如果这是一个函数调用,那么您需要处理该函数中的运行时错误.

'确保您永远不会离开Stop并Resume在生产代码中说明:

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

zhanglei1371 发表于 2022-8-18 19:18

这个CStr(Erl))不错,加减行号可以借助代码助手一类工具自动完成。

lhlking 发表于 2022-8-18 20:24

CStr(Erl))又学习了一招,调用excelVBA时经常为调错而头疼

charleschai 发表于 2022-8-18 20:59

CStr(Erl)),学到了

JackLei 发表于 2022-8-19 10:32

charleschai 发表于 2022-8-18 20:59
CStr(Erl)),学到了

{:1_918:}不给个免费评分吗,哈哈
页: [1] 2
查看完整版本: 如何在vba抛出异常时打印出中断行代码