Vba 当我使用了《专业Excel开发》一书中的错误处理方法时,我该如何调试?
我已经在我的Excel VBA项目中实现了Rob Bovey和Stephen Bullen的专业Excel开发中的错误处理方法 我想知道如何在调试模式下运行,以便找到错误的确切位置,因为输出错误日志只显示错误发生的函数,而不是行Vba 当我使用了《专业Excel开发》一书中的错误处理方法时,我该如何调试?,vba,excel,error-handling,Vba,Excel,Error Handling,我已经在我的Excel VBA项目中实现了Rob Bovey和Stephen Bullen的专业Excel开发中的错误处理方法 我想知道如何在调试模式下运行,以便找到错误的确切位置,因为输出错误日志只显示错误发生的函数,而不是行 另外,我在下面回答了我自己的问题,因为我在运行代码的过程中发现了这个问题。有关完整方法,请参阅他们的优秀书籍。-如何在调试模式下运行- -这段代码基于Rob Bovey和Stephen Bullen的《Excel专业开发》一书中的方法,但这本书没有详细介绍如何调试 -这
另外,我在下面回答了我自己的问题,因为我在运行代码的过程中发现了这个问题。有关完整方法,请参阅他们的优秀书籍。-如何在调试模式下运行- -这段代码基于Rob Bovey和Stephen Bullen的《Excel专业开发》一书中的方法,但这本书没有详细介绍如何调试 -这个答案并没有显示所有的错误处理代码,只显示了如何在调试模式下使用从书中实现的内容 -您的错误堆栈将出现在一个名为error.log的日志文件中,该文件与您的程序位于同一目录中。滚动到底部,查找在运行时列出的第一个函数中发生错误的函数的名称。这可能会让您接近找到错误 -要使用此错误处理系统查找错误的确切点,必须在调试模式下运行 转到模块M_ErrorHandler,其中包含本书中的错误处理功能。您可能对模块进行了不同的命名。 改变
Public Const gbDEBUG_MODE As Boolean = False
到
运行程序
当发生错误时,该函数的执行将在ErrorHandler下的停止行停止
错误退出:
错误处理程序:
端函数
在调试器中,使用F8逐步完成代码。接下来将执行Resume行。您跳转到的下一行就是导致错误的那一行。记下错误的位置并确定如何修复它
按F5运行错误行并再次引发错误,这将使您再次停止
不幸的是,您不能关闭调试并从此点继续。您现在有两个选择:a在任何状态下退出程序停止执行,b小心完成以保护您的数据和工作表
要继续完整的错误清理并防止工作表中出现问题,必须从堆栈中每个函数的ErrorExit标签恢复执行。为此,向上滚动几行,然后单击“错误恢复”旁边的行以放置光标。在调试菜单中,选择调试…设置下一个语句或使用Ctrl-F9
ErrorExit:
On Error Resume Next -- *** PUT CURSOR ON THIS LINE **
-- All the good cleanup lines you have here will run
按F5继续运行。您将在堆栈上的下一个函数的停止行停止。再次单击该函数中的“错误恢复下一步”,然后再次使用Ctrl-F9和F5。重复此步骤,直到到达程序的顶部
修正错误
将调试模式设置为false并保存
Public Const gbDEBUG_模式为布尔值=False
只是好奇为什么是a-1?我花了相当长的时间才弄清楚这个方法的流程,我正在努力节省其他使用该书的人的时间。对于任何访问此问题的人,Shari在前面的问题中发布了大部分相关代码。您可能会对此问题投反对票的原因是,它没有提供足够的信息供他人回答。这一问题如果能够自足,将大有好处。我希望链接可以清除任何浏览者,但是你可以考虑添加代码,或者至少包括在这个问题中的链接。它也将帮助任何人搜索相同的信息。谢谢Blackhawk。我试图不引用太多的书,但我得到了作者的许可,可以在上面的链接中发布我所做的事情,他们甚至通过电子邮件帮助我给出答案!哇!
On Error Resume Next
-- Include cleanup code here
bBoldLateArrivals = bReturn
Exit Function
bReturn = False
If bCentralErrorHandler(msMODULE, sSOURCE) Then
Stop -- *** STOPS HERE ***
Resume
Else
Resume ErrorExit
End If
ErrorExit:
On Error Resume Next -- *** PUT CURSOR ON THIS LINE **
-- All the good cleanup lines you have here will run