LOTUSSCRIPT 言語


情報関数を使用する
次の例では、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 行を表示します。

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

関連項目