Debugging Excel:错误时中断不';不能在用户定义的函数中工作
当从单元格公式(即“用户定义函数”或UDF)调用VBA代码时,通常的VBA中断错误似乎不起作用 我能找到的唯一记录这种行为的地方是一篇名为: 错误处理返回#值错误。UDF代码引发的所有异常都会作为#值错误返回到Excel工作表中 即使您将错误捕获设置为“在所有错误上中断”并单步执行代码**,您也永远不会看到VBA运行时错误对话框-Excel只是悄悄地放弃执行,而不告诉您出了什么问题。当然,这会使调试变得比需要的更困难 有一些潜在的解决方法涉及到错误方面的Debugging Excel:错误时中断不';不能在用户定义的函数中工作,debugging,excel,excel-2003,runtime-error,vba,Debugging,Excel,Excel 2003,Runtime Error,Vba,当从单元格公式(即“用户定义函数”或UDF)调用VBA代码时,通常的VBA中断错误似乎不起作用 我能找到的唯一记录这种行为的地方是一篇名为: 错误处理返回#值错误。UDF代码引发的所有异常都会作为#值错误返回到Excel工作表中 即使您将错误捕获设置为“在所有错误上中断”并单步执行代码**,您也永远不会看到VBA运行时错误对话框-Excel只是悄悄地放弃执行,而不告诉您出了什么问题。当然,这会使调试变得比需要的更困难 有一些潜在的解决方法涉及到错误方面的,,但我不想为了找出错误是在哪里产生的而把
,
,但我不想为了找出错误是在哪里产生的而把代码弄得乱七八糟
是否有一些Excel/VBA选项我忽略了,这将使出错中断正常工作?我正在使用Excel2003
**当从单元格调用调试器时,进入调试器的唯一方法是设置断点或使用
Stop
语句我知道,当您特别要求除错误之外的其他内容时,听到这句话一点也不好玩,但据我所知,这恐怕是唯一的选择
您可以在调试时使用On Error Goto Error handler
(在其他时间注释它以获得默认的On Error Goto 0
)。ErrorHandler
可能只有几行代码,这样就不会使代码过于混乱:
ErrorHandler:
MsgBox Err.Number & vbCrLf & Err.Source & vbCrLf & Err.Description
Resume
始终在Resume
上设置断点,以引导您在单步执行时返回导致错误的语句,并避免无限的错误处理循环 最好的方法是使用On Error GoTo Error handler
和Stop
参考,然后是Resume
由于UDF几乎连续运行(如果发生这种情况,请反复点击Esc
),因此需要小心不要进入无限循环resume
)
因此,在代码中添加:On Error GoTo ErrorHandler
靠近函数开头,然后在结束函数之前的末尾:
Exit Function
ErrorHandler:
MsgBox Err.Number & vbCrLf & Err.Source & vbCrLf & Err.Description
Stop
Resume
退出功能
在正常操作中停止此代码的运行。
如果遇到错误,将弹出包含详细信息的消息框,代码将中断(由于停止
),您可以使用调试工具栏上的下一行命令单步返回代码(通过恢复
语句跳回)
当然,当您对您的UDF感到满意时,不要忘了注释掉“On Error GoTo ErrorHandler”
行