吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 793|回复: 19
收起左侧

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

[复制链接]
放羊的狼 发表于 2022-8-18 14:31
目前是在每个过程的头部写了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 = [a1]

标签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

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
lhlking + 1 + 1 用心讨论,共获提升!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

JackLei 发表于 2022-8-18 18:44
不过要实现这个需要自己在前面加行号,比如这样:
他会自动跳出是第六行出错了
[Visual Basic] 纯文本查看 复制代码
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

免费评分

参与人数 2吾爱币 +1 热心值 +2 收起 理由
TanXin + 1 谢谢@Thanks!
放羊的狼 + 1 + 1 膜拜大佬!

查看全部评分

as614001 发表于 2022-8-18 17:10
 楼主| 放羊的狼 发表于 2022-8-18 17:15
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
还有一种方法:
[Visual Basic] 纯文本查看 复制代码
'不需要行号.

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

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

不给个免费评分吗,哈哈
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 07:51

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表