我有一个复杂的VBA函数和一个包含多个工作表的工作簿。 让我们说代码遍历Sheet1的每一行并对该数据执行某些操作。
我希望能够暂停SourceRow = 16
,查看我在不同工作表上获得的结果,然后继续(按下确定,或某些按键)
我已经尝试了
If SourceRow = 16 Then
MsgBox "ReachedRow 16"
End If
但是消息框是模态的,我无法切换到不同的工作表来查看数据。
P.S。 16只是作为一个例子,现在硬编码,但不会在以后。
答案 0 :(得分:7)
您可以使用Stop
语句,然后按 F5 恢复代码执行。这类似于添加断点。
If SourceRow = 16 Then
Stop
End If
暂停时,该行将突出显示为黄色,您应该可以浏览工作表。
示例:
以类似的方式,您可以使用Debug.Assert (sourcerow <> 16)
,当sourcerow<>16
评估为false时,将暂停代码,也就是说当sourcerow等于16时(感谢RBarryYoung评论)
如果您不想在代码中永久停止,请考虑通过单击VB编辑器中编辑窗口左侧的灰色区域来添加断点,该区域应如下所示:
到达线路时代码将停止。再次按 F5 恢复代码执行。或者,您可以连续按 F8 以逐行执行代码。这消除了设置许多断点的需要。
只需单击栗色圆即可关闭断点。断点不会保存在您的代码中,因此这是一个临时方法(与上面列出的两种方法相反,如果保存工作簿,这两种方法将保留在您的VBA代码中)。
图像来自this tutorial from Wise Owl关于断点。
答案 1 :(得分:5)
SourceRow
(代码中的任意位置),然后点击Add Watch...
。在显示的对话框中,在Expression
文本框中输入以下内容:
SourceRow = 16
在Watch Type
下,选择Break when value is True
。
点击OK
。
当达到该值时,这将自动导致程序中断/暂停,并且不需要为调试/暂停目的添加任何新代码。