VB および VBA の実行時エラーは、On Error 文を使用してトラップします。
この文では、文字通りにシステムにトラップを設定します。この文では、エラーが発生すると専用に書かれたエラー ハンドラに自動的に分岐します。システムの既定のエラー処理はバイパスすることです。
On Error 文には、次の 3 つの形式があります。
On Error Resume Next 文は、エラーを無視する場合に使用します。この文では、エラーをトラップしてエラー メッセージを表示しプログラムを中止させる代わりに、単純に次のコード行に移って処理を続行します。たとえば、モデル空間で循環的に各図形の色を変更するサブルーチンを作成する場合、ロックした画層上の図形の色を変更しようとすると AutoCAD がエラーを返すことが分かっています。そこで、プログラムを中止する代わりに、単純にロックした画層をスキップして残りの図形の処理を続行することにします。On Error Resume Next 文では、これらのことが可能です。
On Error GoTo Label 文は、エラー ハンドラを明示的に記述したい場合に使用します。この文はエラーをトラップし、エラー メッセージを表示しプログラムを中止する代わりに、コード内の特定の箇所にジャンプします。これでコードによってアプリケーションに適したエラー対応をすることができます。たとえば前述の例を拡張し、ロックした画層上の各図形のハンドルを含むメッセージを表示します。
以下のサブルーチンでは、モデル空間を走査して各図形の色を赤に変更します。複数の図形があり、そのうちのいくつかがロックした画層である図面上で、このサブルーチンを実行してみてください。次に On Error Resume Next 文をコメントにして、再度サブルーチンを実行してください。サブルーチンは、ロックした画層上にある最初の図形で終了することが分かります。
Sub Ch11_ColorEntities() Dim entry As Object On Error Resume Next For Each entry In ThisDrawing.ModelSpace entry.Color = acRed Next entry End Sub
以下のサブルーチンでは、モデル空間を走査して各図形の色を赤に変更します。エラー ハンドラは、ロックした画層上の図形ごとにカスタム エラー メッセージと図形のハンドルを表示します。複数の図形があり、そのうちのいくつかがロックした画層である図面上で、このサブルーチンを実行してみてください。次に On Error GoTo MyErrorHandling 文をコメントにして、再度サブルーチンを実行してください。サブルーチンは、ロックした画層上にある最初の図形で終了することが分かります。
Sub Ch11_ColorEntities2() Dim entry As Object On Error GoTo MyErrorHandler For Each entry In ThisDrawing.ModelSpace entry.Color = acRed Next entry ' Important! Exit the subroutine before the error handler Exit Sub MyErrorHandler: Msgbox entry.EntityName + " is on a locked layer." + _ " The handle is: " + entry.Handle Resume Next End Sub
On Error GoTo 0 文は現在のエラー ハンドラをキャンセルします。On Error Resume Next および On Error GoTo Label 文はサブルーチンが終了するか、他のエラー ハンドラが宣言されるか、On Error GoTo 0 文でエラー ハンドラがキャンセルされるまで有効です。