和風スパゲティのレシピ

日本語でコーディングするExcelVBA

エラー対策

確認メッセージを非表示にする - DisplayAlerts

マクロが中断しないようExcelからの確認メッセージを非表示にする、DisplayAlertsプロパティの使い方を解説します。Application.DisplayAlerts=Falseを実行すると以降確認メッセージが表示されなくなり、Trueにすると再度表示されるようになります。

DisplayAlertsを常時Falseにしてはいけない

Application.DisplayAlertsプロパティはExcelからの確認メッセージを非表示にする機能で、削除や閉じる処理に使います。これを常時OFFにしていると、予期せぬ確認メッセージに自動返答されてしまい、マクロのバグが迷宮入りしてしまいます。

通常の実行ではエラーが出るのに1行ずつ実行すると上手くいく原因

マクロがエラーで止まったのに「デバッグ」から1行ずつ実行したら上手くいってしまう。マクロの結果がおかしいので、ステップイン(F8)で1行ずつ実行してみたら正しい結果が出てしまうなどにお悩みの方はこの記事に目を通してみて下さい。

邪魔な通知「コンパイルエラー:修正候補」を切る

コードを書いている途中で、Cells(R, ここでEnterを押したり、別の行を選択したりすると、「コンパイルエラー: 修正候補: 式」のような表示が出ます。この表示は邪魔なので、ツール→オプション→自動構文チェックをOFFにして消すことができます。

変数の宣言を強制(Option Explicit)は必ず設定すべし

マクロを作るとき、コード画面VBEはいろいろとオプションをいじることができますが、まずは真っ先に「変数の宣言を強制する」にチェックを入れておきましょう。この機能はいわば「自動スペルミス検知器」で、最も重要なオプションです。

エラーメッセージを(ググるために)コピーする方法

エラーが発生した際に、そのエラーメッセージをコピーする方法を紹介します。まずはエラー画面で[デバッグ]を押し、イミディエイトウィンドウに移動します。そこに?Err.Descriptionと入力することで、エラーメッセージを取得することができます。

OnErrorResumeNextはIfの分岐をTrueとみなす

Ifの判定部分がOn Error Resume Nextでスキップされた場合、IfステートメントはTRUE側に分岐します。実はIfステートメントはTrueなら通ってよしという処理ではなく、FalseならEndIfまでジャンプという処理なので、それがスキップされるという理屈です。