エラーが発生したとき戻って処理を実行

以下のコードは、エラーが発生したときに特定のエラーハンドラーにジャンプし、エラーメッセージを表示してから、エラーが発生した箇所から処理を再開する方法を示しています。

' エラーが発生したとき戻って処理を実行
Private Sub OnErrorGoTo_Resume()
    Dim num As Long
    
    'エラー処理を開始する
    On Error GoTo ErrHdl
    'インプットボックスを表示し、入力された値を変数に代入する
    num = InputBox("数値を入力")
    '入力された値をメッセージボックスに表示する
    MsgBox "入力された値:" & num
    Exit Sub
ErrHdl:
    MsgBox "数値を入力してください"
    'エラーが発生した箇所から処理を再開する
    Resume
End Sub

コードの詳細な説明

  1. サブルーチンの宣言:Private Sub OnErrorGoTo_Resume()
    • このサブルーチンは、エラーが発生したときの処理を定義しています。
  2. 変数の宣言:Dim num As Long
    • num という名前の長整数型の変数を宣言します。
  3. エラー処理を開始する:On Error GoTo ErrHdl
    • On Error GoTo ErrHdl ステートメントは、エラーが発生した場合にエラーハンドラー (ErrHdl) にジャンプします。
  4. インプットボックスの表示:num = InputBox("数値を入力")
    • インプットボックスを表示し、ユーザーが入力した値を num 変数に代入します。
  5. メッセージボックスの表示:MsgBox "入力された値:" & num
    • 入力された値をメッセージボックスに表示します。
  6. サブルーチンの終了:Exit Sub
    • 正常に処理が完了した場合、この行でサブルーチンを終了します。
  7. エラーハンドラーの開始:ErrHdl:
    • ここからエラーハンドラーの処理が開始されます。エラーが発生した場合、このラベルにジャンプします。
  8. エラーメッセージの表示:MsgBox "数値を入力してください"
    • エラーメッセージをメッセージボックスに表示します。これは、数値以外の入力があった場合など、エラーが発生した際に表示されます。
  9. 処理を再開する:Resume
    • エラーが発生した箇所から処理を再開します。このステートメントは、エラーハンドラーが終了した後に、エラーが発生した行から再度処理を試みることを意味します。

エラー処理の詳細

  • On Error GoTo [label]:
    • エラーが発生したときに指定されたラベルにジャンプし、エラーハンドラーとして処理を続けます。
  • Resume:
    • エラーハンドラーが完了した後、エラーが発生した行から処理を再開します。この方法により、一時的にエラーを処理してから元の処理を再開できます。

実行の流れ

  1. On Error GoTo ErrHdl により、エラー処理が有効になります。
  2. ユーザーが InputBox に値を入力します。数値以外が入力された場合、エラーが発生します。
  3. エラーが発生した場合、ErrHdl ラベルにジャンプし、エラーメッセージを表示します。
  4. Resume により、エラーが発生した行(InputBox の行)から再度処理が再開されます。
  5. ユーザーが再度数値を入力し、正しく入力されれば、入力された値がメッセージボックスに表示され、処理が完了します。

このコードは、ユーザーが数値を入力するまで繰り返しプロンプトを表示する例です。ユーザーが有効な入力をするまで処理を再開し続けます。

Follow me!