次の例では、LotusScript® で、エラー番号、それに関連するエラーメッセージ、その行番号を管理する方法を示しています。
サブルーチン DemoErr が呼び出されると、Error()、Err()、Erl() の値は、それぞれ空の文字列 ("")、ゼロ、ゼロと仮定されます。エラーが発生すると、値が設定し直されます。関連付けられたエラー処理ルーチンが完了すると、値は初期値にリセットされます。
Sub DemoErr
' Show values on entry to sub DemoErr.
Print "Error: " Error(), " Err:" Err(), " Erl:" Erl()
' Designate an error-handling routine; then
' create an error.
On Error GoTo ShowErr
Error 11 ' This is line 10.
' Come here after Resume.
Print "Error: " Error(), " Err:" Err(), " Erl:" Erl()
Exit Sub
ShowErr:
' Display the values on entry to the
' error-handling routine.
Print "Error: " Error(), " Err:" Err(), " Erl:" Erl()
Resume Next
End Sub
Call DemoErr()
' Output:
' Error: Err: 0 Erl: 0
' Error: Division by zero Err: 11 Erl: 10
' Error: Err: 0 Erl: 0
この例は、エラー処理の間の、制御の流れ、制御変数 Error、Err、Erl の値の変化を示します。これは、ここに示したとおりに実行され動作しますが、不自然なスクリプトといえます。この例は、エラー処理の機能を示すことを目的に記述されています。
' This example omits the Exit Sub statement of the preceding
' example. As a result, execution continues on to the
' error-handling routine.
Sub ShowErr
On Error GoTo CheckErr
Error 150 ' This is line 5.
Print "Error was handled... Error, Err, Erl are now:"
Print Error(), Err(), Erl() ' This is line 7.
' Exit Sub statement was dropped here.
CheckErr:
Print Error(), Err(), Erl()
Resume Next ' This is line 11.
End Sub
Call ShowErr()
Print "Back from call of ShowErr"
行番号 5 でエラー 150 が発生した後、CheckErr にあるエラー処理ルーチンが次の行を表示します。
Cannot find module %s 150 5
Resume ステートメントの後、行番号 6 と 7 の Print ステートメントが次の 2 行を表示します。
Error was handled... Error, Err, Erl are now:
0 0
CheckErr の Print ステートメントまで正常に実行され、そこで次の行が表示されます。
0 0
実行は、行番号 11 の Resume Next ステートメントまで正常に進みます。カレントエラーがないので、Resume Next ステートメントが指定する次のステートメント (「Next」ステートメント) はありません。そのため、Resume ステートメント自体が無効となり、エラーを生成します。それがカレントエラーとなり、CheckErr のエラー処理ルーチンが再び呼び出されます。これが次の行を表示します。
RESUME without error 20 11
エラー処理ルーチンは、Resume Next ステートメントで終了します。「次の」ステートメントは End Sub です。したがって、サブルーチンは正常に終了し、サブルーチンの呼び出しの後の Print ステートメントが次の行を表示します。
Back from call of ShowErr
前の例のエラー処理ルーチンの先頭に Err ステートメントが置かれています。その結果、Erl の値が無効になります。Err によって指定されたエラーは記述されなくなります。
Sub ShowErr
On Error GoTo CheckErr
Error 150 ' This is line 3.
Print "Error was handled... Error, Err, Erl are now:"
Print Error(), Err(), Erl() ' This is line 5.
CheckErr:
' Reset the error number, without creating an error.
Err 151
Print Error(), Err(), Erl()
Resume Next ' This is line 10.
End Sub
Call ShowErr()
Print "Back from call of ShowErr"
行番号 3 でエラー 150 が発生した後、CheckErr から始まるエラー処理ルーチンが実行されます。これは、最初にエラー番号 (Err の値) を 151 に設定します。また、Error 関数もリセットします (Erl 関数はリセットしません)。そこで、Print ステートメントが次の行を表示します。
Cannot find external name 151 3
Resume ステートメントの後、行番号 4 と 5 の Print ステートメントが次の 2 行を表示します。
Error was handled... Error, Err, Erl are now:
0 0
実行は、CheckErr から始まるステートメントまで正常に行われます。CheckErr にある Err ステートメントがエラー番号をリセットし、Print ステートメントが次の行を表示します(カレントエラーはないため、Erl の値はゼロのままであることに注意してください)。
Cannot find external name 151 0
次に実行される Resume Next ステートメントは、カレントエラーがないため無効です。そこで、これがエラーを生成し、CheckErr から始まるエラー処理ルーチンが再び呼び出されます。これは、最初に Err を 151 に設定して、次の行を表示します(Error と Err の値は Err に最後に代入された値を表しますが、行番号 10 でカレントエラーが発生したため、Erl は 10 のままです)。
Cannot find external name 151 10
エラー処理ルーチンは、Resume Next ステートメントで終了します。「次の」ステートメントは End Sub です。したがって、サブルーチンは正常に終了し、サブルーチンの呼び出しの後の Print ステートメントは次の行を表示します。
Back from call of ShowErr