VBA デバッグ - メイン プログラムをステップ実行しますが、そこから呼び出されるルーチンを実行しますか?

VBA デバッグ - メイン プログラムをステップ実行しますが、そこから呼び出されるルーチンを実行しますか?

たとえば、多くの処理を実行し、さまざまな他のプログラムを呼び出す大きなプライマリ ルーチンがあるとします。

デバッグするときは、メイン プログラムをステップ実行して、F8何が起こっているかを行ごとに確認します。

ただし、これを行うと、そのメイン サブから呼び出すすべてのルーチンもステップ実行されます。呼び出されたルーチンまでスクロールしてEnd SubBreak を配置する代わりに、VBA でそのルーチンを実行し、メイン プログラムに戻ったときに停止する方法はありますか?

現在、これを行うには2つの方法があります。行に改行を追加するMAIN ルーチンでサブを呼び出すか、呼び出されたルーチンの行にブレークを追加します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

したがって、メイン プログラムを 1 行ずつ実行するときに、または でdo_thingsbreak を置かなくても実行できるようにしたいと思います。For Each cel in rng...End Sub

解決策の 1 つは、VBA が行breakに当たったときに自動的に実行するEnd Subか、何かを実行することだと思います。アイデアは歓迎です。いろいろ検索してみましたが、上で述べた現在の解決策以外には何も見つかりません。

(タイトルが少し不格好で申し訳ありません。もっと良い言い方が思いつかなかったので、自由に編集してください)。

答え1

あります。ただし、一見すると明らかではないかもしれません。

そのサブルーチン内では(どのルーチンでも動作しますが)、Debug --> Step OutCTRL+SHIFT+F8)に進みます。

これは実際には完了そのルーチンを実行してから、該当する場合は他のコードの次の行に進みます (最初に読んだときは、単に現在の行でそのルーチンを停止し、それを呼び出したルーチンに戻るものだと思いました)。

例えば:

Sub main_program()
Dim rng As Range
Set rng = Range("A1:B10")

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
    cel.Value = "Test"
Next cel
For Each cel In rng
    If cel.Row Mod 2 = 1 Then cel.EntireRow.Font.Bold = True
Next cel
End Sub

上記の.gif:

ここに画像の説明を入力してください

編集:この回答をより完全なものにするために、素晴らしいコメントを追加したいと思いました。@MathieuGuindonによると、行が強調表示されている場合は、 ()do_things rngを実行してDebug --> Step OverSHIFT+F8走る do_things完全に終了し、次の行で停止します。

関連情報