Microsoft VBA プロシージャの汎用エラー処理ルーチンを使用してエラーを処理する方法 - TechRepublic

Microsoft VBA プロシージャの汎用エラー処理ルーチンを使用してエラーを処理する方法 - TechRepublic
VBAコンセプトテキスト日光3Dイラスト
画像: profit_image/Adobe Stock

Microsoft Visual Basic for Applications は、Microsoft Office アプリの基盤となる開発言語です。各アプリは独自のオブジェクトモデルを備えていますが、一部のロジックは共通しています。例えば、すべてのモデルでループ、if文、エラー処理などが利用可能です。

VBAを使用する場合、アプリケーションの種類に関わらず、各プロシージャに汎用的なエラー処理ルーチンを追加することを検討してください。ただし、そのプロシージャでより詳細なエラー処理が必要ない場合は除きます。予期しないエラーが発生しても、プロシージャが中断されることはありません。代わりに、エラーのトラブルシューティングと適切な処理に役立つ情報メッセージが表示されます。

参照: 採用キット: Python 開発者 (TechRepublic Premium)

このチュートリアルでは、VBAプロシージャに挿入して予期しないエラーを検出できるVBAコードブロックを紹介します。私はWindows 10 64ビットシステムでMicrosoft 365を使用していますが、以前のバージョンのMicrosoft Officeでも使用できます。

Office の VBA On Error ステートメントとは何ですか?

VBAには、トラブルシューティング時にエラーを見つけるのに役立つ多くのデバッグツールがあります。On Errorステートメントは2つの機能を持ちます。エラーに応答し、そのエラーを修正するためのフローを指定します。実行時エラーは、コードにエラーがある場合に発生します。これはいくつかの理由で発生しますが、主に構文エラーやVBAが処理できないコード要求が原因で発生します。

On Error ステートメントでは次の構文を使用します。

  • エラー時のGoTo行
  • エラー時に再開次へ
  • エラー時に0へ移動

ここでは最初の構文を扱います。これは、フローを特別なエラー処理ルーチンに誘導する構文で、lineそのルーチンはプロシージャ内で によって識別されます。ジェネリック構文lineは次のようになります。

On Error GoTo errHandler

errHandler のバリエーションを目にすることもあるかもしれませんが、lineコードを確認する際にはすぐに見分けられるはずです。この場合、エラーが発生するとフローは errHandler に移行します。On Error ステートメントを使用しない場合、実行時エラーは実行が停止するため、致命的となります。

On Error ステートメントについて理解できたので、次はそれを使用してみましょう。

Office アプリでエラー処理ルーチンを使用する方法

汎用エラー処理ルーチンは、エラーの発生を防ぐものではありません。その役割は、エラーの発生元となったコードを修正できるように、エラーを明らかにすることです。エラーによってコードが停止すると、エラー発生の原因に関する情報はほとんど得られませんが、汎用エラー処理ルーチンは、エラーを修正するために必要な情報を表示します。コードにエラーがないと確信している場合でも、リストAのような汎用エラー処理ルーチンを追加することをお勧めします。

リストA

Private | Public Function | Sub | procedurename()

On Error GoTo errHandler

….procedure code…

'object = Nothing

Exit | Function | Sub

errHandler: 'The colon character is required.

MsgBox "Error " & Err.Number & ": " & Err.Description & " in " & _

VBE.ActiveCodePane.CodeModule, vbOKOnly, "Error"

'object = Nothing

End Sub

プロシージャのコードの前にステートメントを挿入してくださいOn Error GoTo line。プロシージャのコードの後に​​は、Exitステートメントを含めてください。そうしないと、VBAは不要なerrHandler:ルーチンを実行してしまう可能性があります。

コードでオブジェクトを作成する場合は、必ずそれらを破棄し、Exit ステートメントと End ステートメントの前に必要な object = Nothing ステートメントを追加してください。リスト A では各箇所に 1 つずつステートメントを追加していますが、念のためコメントアウトされています。ただし、複数のステートメントが必要になる場合もあります。

参照: 採用キット: バックエンド開発者 (TechRepublic Premium)

errHandler コードは、エラー番号、説明、モジュール名を含むメッセージを表示します。私はこれをすべての VBA プロシージャに追加し、開発中に煩わしくなった場合はルーチンをコメントアウトしています。

コードには具体的な処理が必要であり、それをコードに記述する必要があります。コードをテストすればするほど、通常はより具体的な処理を追加することになります。しかし、予期しないエラーによってコードが停止する可能性は常に存在します。そのため、すべてのプロシージャには汎用的なエラー処理ルーチンが必要です。このルーチンはエラーを修正して処理を続行することはできませんが、問題の原因を特定して修正できるように役立つ情報を表示します。

Tagged: