如何在调用代码时强制VBA编辑器进入中断模式?

时间:2013-11-05 20:01:41

标签: vba excel-vba ide editor excel

我希望能够在调用VBA代码时打开/关闭选项以进入中断模式。我知道这样做的唯一方法是在所有“入口点”设置断点到代码中,或者确实这些方法中的每一个都调用一个单独的函数来进行调试。

“入境点”可能是按钮点击或工作表事件,其中有相当多的。

例如,我可以这样做:

Private Sub bt1Click()
    callThisOnEveryMethod
    'other code
End Sub
Private Sub bt2Click()
    callThisOnEveryMethod
    'other code
End Sub
'etc, repeat 100 times
Private Sub callThisOnEveryMethod()
    'set breakpoint on this method
End Sub

这不是很理想,因为我依赖于我将其添加到每个方法和每个后续方法中。我真的不相信自己能够以这种方式获得100%的支持,而且仅仅为了调试目的而且很混乱。我也可以在这里添加其他代码,甚至将它包装在if MY_GLOBAL_DEBUG_BOOLEAN then类型的语句中,但我仍然需要将此代码(或调用方法)添加到我写的每个方法,这可能会启动VBA执行。

想象一下,我可能有100个方法可能是VBA代码执行的开始。

每次我想要这样做时,在每个方法上设置和删除断点并不理想,因为要打开/关闭的数字。

我想要的是以某种方式告诉VBA“无论何时开始执行代码,无论断点,断言,并且不要求每个方法都有大量额外代码,立即中断并进入调试模式。”

这可能吗?

2 个答案:

答案 0 :(得分:10)

有两种方法可以破解代码并进入调试模式:

a)使用简单的Stop指令:

Sub MyProcedure()
   '...any code here
   Stop     'execution will stop here, debugging will start here
   '...the rest of the code
End sub

b)以这种方式Debug.Assert False

Sub MyProcedure()
   '...any code here
   Debug.Assert False     'execution will stop here, debugging will start here
   '...the rest of the code
End sub

但是,您可以使用与Debug.Assert Condition一起使用的任何条件 - 每次条件将返回False代码将停止。一个样本:

Dim A
A=10
Debug.Assert A<>10   'stopping execution here... entering debugging mode

答案 1 :(得分:3)

我担心答案是否定的,如果不在每个入口点程序中插入代码或断点,就无法做到这一点。

为什么没有办法做到这一点?那么,真正的问题是,为什么应该有办法做到这一点?重点是什么?永久调试模式毫无意义。调试模式的想法是,当且仅当您需要调试特定过程或错误时才输入它。我不确定你到底要做的是什么?

无论如何,你建议callThisOnEveryMethod的方式可能是你能得到的最接近的方式。或者实际上,不需要定义新程序:只需使用

Debug.Assert MY_GLOBAL_DEBUG_BOOLEAN

位于入口点过程的顶部,其中MY_GLOBAL_DEBUG_BOOLEAN是公共模块级常量,必须设置为False才能进入调试模式。