エラー・デバッグ
On Error Resume Next下においては、Callしたプロシージャ内でエラーが発生すると即座にCall元に戻ります。エラー発生コードからEndSubまでのコードは一切実行されませんのでご注意ください。
プロシージャをCallする際、親子どちらでOnErrorを設定したかによって、どのように処理内容が変化するかをまとめました。エラー処理を行う際の参考にして下さい。
ブレークポイントとStopステートメントの違いを解説します。どちらもマクロの実行を任意の位置で一時停止する機能ですが、保存できるかどうか、条件を設定できるか、設定の簡単さ
マクロを任意の行で一時停止させる方法を解説します。ブレークポイントとStopステートメントの2種類の方法があります。ブレークポイントは気軽に設定できるのが利点で、対してStopは停止条件を設定できるのが利点です。
Dictionaryは中身の確認が難しい欠点があります。ローカルウィンドウでKeyは見れますがItemは見ることができません。この対策として「Dictionaryを新規シートに出力する」マクロを用意するのがおすすめです。
マクロの不具合検証やバグ取り(デバッグ)を行っているとき、「その不具合がいつ起きたか」を知りたいことがよくあります。そんなとき、値や状態の変更を検知できる「ウォッチウィンドウ」が活躍します。
マクロをテストする際、Debug.Printなど表示機能を使ったり、作業シートを削除せず残したりします。これをPublic定数を使って「If Isデバッグモード Then」で分岐することで、一括で実行管理することができます。
配列をマクロに利用する際、中身を確認するのにひと手間かかるのですが、「新規シートに配列を出力する」マクロを用意することで対策ができます。フィルターを設置することでデバッグ作業の効率が上がります。
イミディエイトウィンドウをクリアする方法を紹介します。専用のプロパティ、組込関数はありませんので、イミディエイトウィンドウの限界行数である200行分、Debug.Printを実行することで疑似的に行います。
マクロが中断しないようExcelからの確認メッセージを非表示にする、DisplayAlertsプロパティの使い方を解説します。Application.DisplayAlerts=Falseを実行すると以降確認メッセージが表示されなくなり、Trueにすると再度表示されるようになります。
Application.DisplayAlertsプロパティはExcelからの確認メッセージを非表示にする機能で、削除や閉じる処理に使います。これを常時OFFにしていると、予期せぬ確認メッセージに自動返答されてしまい、マクロのバグが迷宮入りしてしまいます。
マクロがエラーで止まったのに「デバッグ」から1行ずつ実行したら上手くいってしまう。マクロの結果がおかしいので、ステップイン(F8)で1行ずつ実行してみたら正しい結果が出てしまうなどにお悩みの方はこの記事に目を通してみて下さい。
コードを書いている途中で、Cells(R, ここでEnterを押したり、別の行を選択したりすると、「コンパイルエラー: 修正候補: 式」のような表示が出ます。この表示は邪魔なので、ツール→オプション→自動構文チェックをOFFにして消すことができます。
マクロを作るとき、コード画面VBEはいろいろとオプションをいじることができますが、まずは真っ先に「変数の宣言を強制する」にチェックを入れておきましょう。この機能はいわば「自動スペルミス検知器」で、最も重要なオプションです。
エラーが発生した際に、そのエラーメッセージをコピーする方法を紹介します。まずはエラー画面で[デバッグ]を押し、イミディエイトウィンドウに移動します。そこに?Err.Descriptionと入力することで、エラーメッセージを取得することができます。
Ifの判定部分がOn Error Resume Nextでスキップされた場合、IfステートメントはTRUE側に分岐します。実はIfステートメントはTrueなら通ってよしという処理ではなく、FalseならEndIfまでジャンプという処理なので、それがスキップされるという理屈です。