ワードマクロ:VBEでデバッグ。ステップ(イン、オーバー、アウト)の違い

シェアする

ワードマクロの動作がおかしいとき、VBEを使ったデバッグが便利です。

やり方は記事「ワードマクロ:VBEでマクロの動作がおかしいときのテストのやり方」に紹介しています。

この記事では、ブレークポイントで実行一時停止中に、ステップイン、ステップオーバー、ステップアウトの動作の違いについて実例をもとに説明します。

3つのステップ実行の違い

動作の違いは以下のとおりです。

  • ステップイン
    1行だけ実行を進めます。もしステートメントがプロシージャ呼び出しの場合、そのプロシージャの中の1行だけ実行します。
  • ステップオーバー
    1行だけ実行を進めます。もしステートメントがプロシージャ呼び出しの場合、そのプロシージャは全て実行してしまいます。
  • ステップアウト
    プロシージャを全て実行し呼び出し元まで処理が戻ります。

実際にどうなるのか、以下のプログラムで説明します。

テストするプログラム

下図のように、「ステップ実行テスト」マクロから、「insert_text」というSubプロシージャを引数付きで2回呼び出します。

ステップイン

ステップインは1行ごとに実行を進めます。次に実行するステートメントがプロシージャだったら、そのプロシージャの最初の1行だけ実行されます。

下図では、黄色で塗られたプロシージャ呼び出しが次に実行されるステートメントになってます。ここで、ステップインをクリックして、処理を進めると・・・・・

下図のようにプロシージャの中にローカルが移動しました。
下方のローカルウィンドウの変数も、呼び出された 「insert_text」プロシージャの中の変数が表示されています。

ステップオーバー

ステップオーバーも1行ごとに実行を進めます。次に実行するステートメントがプロシージャだったら、ステップオーバーの場合、そのプロシージャを完全に実行して次のステートメントに進みます。

下図では、ステップインの場合と同様に、黄色で塗られたプロシージャ呼び出しが次に実行されるステートメントになってます。

ここで、ステップオーバーをクリックして、処理を進めると・・・・・

下図のように、実行中のプロシージャの中で1ステートメント実行されました。

ステップインに比べ、ドサッと実行が進みます。

ステップアウト

プロシージャを全て実行し呼び出し元まで処理が戻ります。マクロのように、ユーザに実行されたマクロのように一番外の階層のプロシージャの場合、マクロの実行が終わります。

下図のように、「ステップ実行テスト」プロシージャから「insert_text」プロシージャを呼び出して「insert_text」プロシージャの中で実行を一時停止している状態で、ステップアウトをしてみると・・・・

ステップアウトでは、その時に実行していたプロシージャのステートメントは全て実行し、呼び出し元のプロシージャに文脈(実行しているプロシージャ)が戻りました。

この記事が気に入ったら
いいね ! しよう