【问题标题】:Set breakpoint in VBA code programmatically以编程方式在 VBA 代码中设置断点
【发布时间】:2012-07-24 16:08:52
【问题描述】:

我有一大段用 VBA 编写的代码(>50,000 行 - 大量模块)。我对一个数组感兴趣,我想找出这个数组的任何元素的值发生变化的所有条件。这些值可以在任何模块中更改。由于代码的大小,逐行运行脚本并不是最有效的选择。

我正在寻找更好的方法来解决这个问题。我想到的两种方法是以编程方式设置断点(我不确定是否可以完成)或以编程方式在每次赋值后插入一个 if 块,以某种方式提醒我值已更改。 (不是首选)。

所以我的问题归结为:

  1. 是否可以在 VBA 代码中以编程方式设置断点?
  2. 如果上述问题的答案是,那么解决这个问题的有效方法是什么?

更新: 感谢您的 cmets/回复。正如我所暗示的,我对当前代码的最少修改(即插入 if 块等)感兴趣,并且对断点的想法最感兴趣。我想知道它是否可行。

【问题讨论】:

  • 如果您创建一个 Get/Set 对子来包装对数组的访问,那么您可以在每个子程序中设置一个断点,但这当然需要一些重构...

标签: vba excel breakpoints


【解决方案1】:

如果某个条件为真,请使用关键字STOP 来中断代码。

【讨论】:

  • 如果您使用 Stop 则所有状态都将丢失 - 可能不是 OP 正在寻找的。​​span>
  • IIRC 停止保留状态,Debug.Assert IfFalse 同上
【解决方案2】:

有两种方法可以做到这一点:

  1. 使用停止关键字。示例如下,在 Stop 处设置断点

     if (x = 21 ) Then
       Stop
      End If
    
  2. 使用添加监视

    转到调试 -> 选择添加观察

【讨论】:

    【解决方案3】:

    注意:我知道这是一个老话题,但这可以帮助其他人。

    你可以使用手表:

    右键单击您要监视的变量-> 添加监视... 在手表类型中:'值变化时中断'

    在运行代码时,您可以通过 Watch Window(可从“查看”菜单访问)检查手表的状态

    【讨论】:

      【解决方案4】:

      希望有人能从中受益: 在这种情况下,无论使用哪种编程语言——用 Perl、AWK 甚至 shell 脚本编写几行代码都可以解决问题: 搜索包含数组名称的正则表达式(忽略大小写)。 将工作簿中的所有模块和类导出到给定目录后 - 脚本可以为您搜索这些。

      【讨论】:

      • VBA 带有自己的正则表达式工具。
      猜你喜欢
      • 1970-01-01
      • 2011-05-18
      • 1970-01-01
      • 2013-04-05
      • 1970-01-01
      • 2013-04-07
      • 1970-01-01
      • 1970-01-01
      • 2011-07-22
      相关资源
      最近更新 更多