Excel:错误中断不能在用户定义的函数中使用

看起来,当从单元格公式(即“用户定义函数”或UDF)调用VBA代码时,通常的VBA Break On Error不起作用。

我唯一可以find这种行为的地方是一篇名为“为Excel 2007和Excel Services开发用户定义的函数”的文章中的几行:

error handling返回#VALUE错误。 由UDF代码抛出的所有exception都以#VALUE错误的forms返回到Excel工作表中。

即使您将Error Trapping设置为“Break on All Errors”并单步执行代码**,您也将永远无法看到VBA运行时错误对话框–Excel只是静静地放弃执行,而不会告诉您哪里出错了。 当然,这使得debugging比需要更困难。

有一些潜在的解决方法涉及On Error但是我宁愿不要混淆我的代码,只是为了找出引发错误的位置。

是否有一些Excel / VBA选项,我忽略了这将使Break On Error正常工作? 我正在使用Excel 2003。

**从单元调用时进入debugging器的唯一方法是设置断点或使用Stop语句

我意识到,当你特意要求其他东西而不是On Error ,听到这个并不是什么好玩的事,但恐怕这是我唯一的select。

您可以在debugging时使用On Error Goto ErrorHandler (并在其他时间将其注释掉以获取默认的On Error Goto 0 )。 ErrorHandler可能只有几行,所以它不会混乱你的代码太多:

 ErrorHandler: MsgBox Err.Number & vbCrLf & Err.Source & vbCrLf & Err.Description Resume 

总是在Resume上带有一个断点,以便在步进时引导您返回引起错误的语句 – 并避免无限的error handling循环。

最好的方法是使用On Error GoTo ErrorHandlerStop参考,然后是Resume

需要小心,不要因为UDF几乎不断地运行而陷入无限循环(如果发生这种情况,请重复执行Esc

所以在你的代码中添加: On Error GoTo ErrorHandler near the function of your function,then right right end before End Function

 Exit Function ErrorHandler: MsgBox Err.Number & vbCrLf & Err.Source & vbCrLf & Err.Description Stop Resume 

Exit Function停止正常运行中运行的代码。 如果遇到错误,将popup包含详细信息的消息框,代码将会中断(由于Stop ),您可以使用debugging工具栏上的下一行命令重新进入代码(通过resume语句跳回)。

当你对UDF感到满意的时候,不要忘了把On Error GoTo ErrorHandler注释掉。