Excel VBA - 暂停代码执行

时间:2015-07-28 15:14:56

标签: excel vba excel-vba

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

我希望能够暂停SourceRow = 16,查看我在不同工作表上获得的结果,然后继续(按下确定,或某些按键)

我已经尝试了

If SourceRow = 16 Then
    MsgBox "ReachedRow 16"
End If

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

P.S。 16只是作为一个例子,现在硬编码,但不会在以后。

2 个答案:

答案 0 :(得分:7)

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

If SourceRow = 16 Then
      Stop
End If

暂停时,该行将突出显示为黄色,您应该可以浏览工作表。

示例:

enter image description here

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

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

enter image description here

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

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

图像来自this tutorial from Wise Owl关于断点。

答案 1 :(得分:5)

  1. 右键点击SourceRow(代码中的任意位置),然后点击Add Watch...
  2. 在显示的对话框中,在Expression文本框中输入以下内容:

    SourceRow = 16
    
  3. Watch Type下,选择Break when value is True

  4. 点击OK

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