如何在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 不过要实现这个需要自己在前面加行号,比如这样:
他会自动跳出是第六行出错了
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
手动调试
你这话没任何意义,但为表尊重我还是要回复你。 -------试试这个---------
On Error GoTo Error_In_Command
Error_In_Command:
MsgBox ("Error in line: " & CStr(Erl)) 还有一种方法:
'不需要行号.
'需要较小的函数来处理运行时错误.
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 这个CStr(Erl))不错,加减行号可以借助代码助手一类工具自动完成。 CStr(Erl))又学习了一招,调用excelVBA时经常为调错而头疼 CStr(Erl)),学到了 charleschai 发表于 2022-8-18 20:59
CStr(Erl)),学到了
{:1_918:}不给个免费评分吗,哈哈
页:
[1]
2