Excel VBA - 暂停代码执行

Bor*_*w37 5 excel vba excel-vba

我有一个复杂的VBA函数和一个包含多个工作表的工作簿.假设代码遍历Sheet1的每一行并对该数据执行某些操作.

我希望能够暂停SourceRow = 16,检查我在不同的纸张上得到的结果,然后继续(按下确定,或一些按键)

我试过了

If SourceRow = 16 Then
    MsgBox "ReachedRow 16"
End If
Run Code Online (Sandbox Code Playgroud)

但消息框是模态的,我无法切换到不同的工作表来查看数据.

PS 16就是一个例子,现在硬编码,但不会在以后.

Sou*_*ire 10

您可以使用该Stop语句,然后按F5以恢复代码执行.这类似于添加断点.

If SourceRow = 16 Then
      Stop
End If
Run Code Online (Sandbox Code Playgroud)

在暂停时,该行将突出显示为黄色,您应该能够导航工作表.

例:

在此输入图像描述

以类似的方式,您可以使用Debug.Assert (sourcerow <> 16)哪个会在sourcerow<>16评估为false 时暂停代码,也就是说当sourcerow等于16时.(感谢RBarryYoung的评论)

如果您不想在代码中永久停止,请考虑通过单击VB编辑器中编辑窗口左侧的灰色区域来添加断点,该区域应如下所示:

在此输入图像描述

到达线路时代码将停止.再次按下F5以恢复代码执行.或者,您可以连续按F8,以逐行逐步执行代码.这消除了设置许多断点的需要.

只需单击栗色圆圈即可关闭断点.断点不会保存在您的代码中,因此这是一个临时方法(与上面列出的两种方法相反,如果您保存工作簿,这两种方法将保留在您的VBA代码中).

这些图片来自Wise Owl关于断点的本教程.

  • 实际上你可以使用`Debug.Assert(SourceRow <> 16)`并且不使用`If`结构. (3认同)

Bon*_*ond 7

  1. 右键单击SourceRow(代码中的任意位置)并单击Add Watch....
  2. 在出现的对话框中,在Expression文本框中输入以下内容:

    SourceRow = 16
    
    Run Code Online (Sandbox Code Playgroud)
  3. Watch Type,选择Break when value is True.

  4. 点击OK.

当达到该值时,这将自动导致程序中断/暂停,并且不需要为调试/暂停目的添加任何新代码.