Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 当我使用了《专业Excel开发》一书中的错误处理方法时,我该如何调试?_Vba_Excel_Error Handling - Fatal编程技术网

Vba 当我使用了《专业Excel开发》一书中的错误处理方法时,我该如何调试?

Vba 当我使用了《专业Excel开发》一书中的错误处理方法时,我该如何调试?,vba,excel,error-handling,Vba,Excel,Error Handling,我已经在我的Excel VBA项目中实现了Rob Bovey和Stephen Bullen的专业Excel开发中的错误处理方法 我想知道如何在调试模式下运行,以便找到错误的确切位置,因为输出错误日志只显示错误发生的函数,而不是行 另外,我在下面回答了我自己的问题,因为我在运行代码的过程中发现了这个问题。有关完整方法,请参阅他们的优秀书籍。-如何在调试模式下运行- -这段代码基于Rob Bovey和Stephen Bullen的《Excel专业开发》一书中的方法,但这本书没有详细介绍如何调试 -这

我已经在我的Excel VBA项目中实现了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