Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel VBA-暂停代码执行_Vba_Excel - Fatal编程技术网

Excel VBA-暂停代码执行

Excel VBA-暂停代码执行,vba,excel,Vba,Excel,我有一个复杂的VBA函数和一个包含多个工作表的工作簿。 假设代码遍历Sheet1的每一行,并对该数据进行处理 我希望能够暂停SourceRow=16,查看我在不同工作表上得到的结果,然后继续(按ok或某些按键) 我试过了 If SourceRow = 16 Then MsgBox "ReachedRow 16" End If 但是消息框是模态的,我无法切换到其他工作表来查看数据 p.S.16只是一个示例,目前是硬编码的,以后不会再硬编码。您可以使用Stop语句,然后按F5继续执行代码。

我有一个复杂的VBA函数和一个包含多个工作表的工作簿。 假设代码遍历Sheet1的每一行,并对该数据进行处理

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

我试过了

If SourceRow = 16 Then
    MsgBox "ReachedRow 16"
End If
但是消息框是模态的,我无法切换到其他工作表来查看数据


p.S.16只是一个示例,目前是硬编码的,以后不会再硬编码。

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

If SourceRow = 16 Then
      Stop
End If
暂停时该行将以黄色突出显示,您应该能够浏览工作表

例如:

以类似的方式,您可以使用
Debug.Assert(sourcerow 16)
,当
sourcerow 16
的计算结果为false时,即当sourcerow等于16时,它将暂停代码。(感谢您的评论)

如果您不希望在代码中有一个永久的停止,请考虑在VB编辑器中单击编辑窗口左边的灰色区域添加一个断点,它应该是这样的:

到达该行时,代码将停止。再次按F5继续执行代码。或者,您可以连续按F8键逐行查看代码。这样就不需要设置许多断点

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

这些图像是从断点处拍摄的

  • 右键单击
    SourceRow
    (代码中的任意位置),然后单击
    addwatch…
  • 在出现的对话框中,在
    表达式
    文本框中输入以下内容:

    SourceRow = 16
    
  • 手表类型
    下,选择
    值为真时中断

  • 单击
    OK


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

    Debug.Assert False
    ?断点是否足够?这将允许代码在到达某一行时停止(可以在If语句中),然后允许您更改工作表等,然后继续运行code@Evan我同意断点是一种可能的选择,但当我在做Boris所指的事情时,如果我在循环中包含一个特定点的断点,并且需要添加一个“if i=x”语句,然后按照Joshua在下面指出的那样使用Stop,就不需要添加额外的代码行,只需单击断点即可。实际上,您可以使用
    Debug.Assert(SourceRow 16)
    也可以不使用
    If
    结构。更新是因为这是一种更好的方法。谢谢!我从来不知道如何使用“Watch”。每天学习一些新东西。:thumbsup:(快速提问:您认为添加一些“手表”而不是在代码中使用5个“断点”更好吗?还是100%的用户偏好,两者都实现相同的功能?)这是一个可以单独提出并生成大量注释的问题。监视更多地是关于变量检查,断点是关于暂停执行。但是,许多调试器(如VBA)将一些断点功能构建到他们的手表中,这样你就可以创建一个基本上是条件断点的功能。手表最酷的地方是,如果代码很长,你就不必找出所有断点。此外,根据条件的不同,你可能想也可能不想在一行上断开断点,而断点总是会在那里断开。如果你的同事条件是i=5,手表每次i=5时都会有代码中断,所以功能更强大。@DavidGM-这是一个很好的观点。我使用了几个中断点,但只有它们,因为我在等待循环达到某个值。这对我来说是一个非常有成效的线程。谢谢你们两位!!