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