LOTUSSCRIPT 言語
例 1
サブルーチン 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
例 2
この例は、エラー処理の間の、制御の流れ、および制御変数 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
例 3
前の例のエラー処理ルーチンの先頭に 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. 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 行を表示します。
実行は、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 ステートメントは次の行を表示します。
関連項目