假设我有一个很大的主要例程,它做很多事情并调用各种其他程序。
调试时,我会单步执行我的主程序,F8这样我就可以逐行查看正在发生的事情。
但是,当我这样做时,我从该主子调用的任何例程也会被单步执行。有没有办法让 VBA 只运行那个例程,而不是滚动到那个被调用的例程End Sub
并放置一个中断,但是当我回到我的主程序时停止?
目前,我有两种方法可以做到这一点。在我调用一个子程序后,在主程序中添加一个中断 - 或者 - 我在该被调用程序的End Sub
行中添加一个中断。
例如,
Sub main_program()
Dim rng As Range
Set rng = Range("A1:Z1000")
do_things rng
Dim cel As Range
For Each cel In rng.SpecialCells(xlCellTypeBlanks)
Debug.Print cel.Offset(1, 0).Value
Next cel
End Sub
Sub do_things(rng As Range)
Dim cel As Range
For Each cel In rng
If cel.Value <> "something" Then
cel.Font.Bold = True
End If
Next cel
End Sub
因此,当逐行浏览我的主程序时,我希望能够运行do_things
而无需在.For Each cel in rng...
或End Sub
.
我猜想一种解决方案是让 VBAbreak
在碰到一条End Sub
线时自动使用,或者其他什么。我对想法持开放态度,我已经四处搜索,除了我上面提到的当前解决方案之外找不到任何真正的解决方案。
(对不起,如果标题有点笨拙,我真的想不出更好的表达方式 - 随意编辑)。
有——尽管乍一看可能并不明显。
当您在该子程序中时(尽管它适用于任何程序),请转到
Debug --> Step Out
( CTRL+SHIFT+F8)。这实际上将完成该例程,然后转到其他代码的下一行(如果适用)。(在第一次阅读时,我认为它只是在当前行停止了该例程,然后返回到调用它的例程)。
例如:
以上的.gif:
编辑:我想添加一个很好的评论以使这个答案更完整。根据@MathieuGuindon,当该
do_things rng
行突出显示时,您可以执行Debug --> Step Over
( SHIFT+F8) 并完全运行do_things
,它会在下一行停止。