首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >当调用代码时,如何强制VBA编辑器进入中断模式?

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

Stack Overflow用户
提问于 2013-11-05 20:01:40
回答 3查看 32.2K关注 0票数 6

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

“入口点”可能是按钮单击或工作表事件,并且有相当数量的事件。

例如,我可以这样做:

代码语言:javascript
运行
复制
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“每当您开始执行代码时,立即中断并进入调试模式,而不考虑断点、断言,并且不要求每个方法都有大量额外的代码。”

这个是可能的吗?

EN

Stack Overflow用户

发布于 2022-05-15 11:39:51

我现在正面临这种情况,因为我需要将我的代码半动态地调整到数据功能布局的某些变化(数据中有什么名称的表,也可以将一些表内容与服务器上的结构化数据匹配),所以我需要在期望一些需要适应的东西时轻松地执行一些额外的代码。能够检测代码是否正常运行或处于调试模式(一种动态调试模式)也是非常方便的。

我找到了一种方法,可以强制进入"Debug模式“( debug模式),但在单击调试并在代码中移动之后,模式实际上返回到”运行“而不是”中断“。因此,我最终为整个项目使用了一个全局的"Pseudobreakmode“变量--分为全局变量和本地变量,从一开始就通过使用”假“过程调用来设置全局变量,该过程调用仅用于调试模式,使用断言点确保在测试模式(F5 / F8)运行时在正确的位置停止,这允许我在需要时启用/禁用这些块。

代码语言:javascript
运行
复制
Public Type tDebuggingMode
    Global As Boolean
    Local As Boolean
End Type

Public oDebuggingmode As tDebuggingMode

Private Sub DebugStart()
    oDebuggingmode.Global = msoTrue
    Call StartNormal
End Sub

Sub StartNormal()
    '.....' developments

End Sub

Sub SubprocedurewhateverThatneedCheckingafter()
    '..... whatever needs to be done

    If Not oDebugging.Global Then Exit Sub
'------------------ end of the normal code
    Debug.Assert False ' stopping here allows to switch dynamically the local debugging on or off below (in prevision of many repetitions until the global project works smooth)
    oDebugging.Local = True
    If Not oDebugging.Local Then Exit Sub
    '............ specific code for debugging
    oDebugging.Local = False
End Sub
票数 0
EN
查看全部 3 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19797828

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档