たま氏の覚え書き

KNIME・AccessVBA・Swift等、学習したことを覚え書き

AccessVBA_エラー対処その2【On Error】【Resume】処理の分岐と処理再開地点の設定

エラーが発生した際に処理分岐し、かつ処理の再開地点をケースごとに設定する方法

今回の記述に関する前情報

何を行うか

エラーが発生した場合に、その後の処理を行うかどうかユーザが選択し、かつ選択した処理を行う

利用時の書式

On Error GoTo 行ラベル
行ラベル:
~処理~
 Resume


記述例における利用パーツ

ステートメント
  →On Error Goto / Select Case
  →Resume / Resume Next / Resume 行ラベル

Resumeステートメントについてbr>

Resumeステートメント:エラーが起こった地点に戻って処理を再開
Resume Nextステートメント:エラーが起こった地点の次の行に戻って処理を再開
Resume 行ラベル:行ラベルの地点に移動して処理を再開

【実践】エラー発生時に処理の再開地点をケースごとに分ける記述例

メッセージボックスに入力した値が数値でなくてエラーがでた場合に
処理を終えるか、再度入力するか、そのまま継続するかを選択させたうえで設定しておいたそれぞれの処理再開地点に移動する

▼記述例▼

Sub err()

Dim MyVal As Long
On Error GoTo ErrLabel
MyVal = InputBox("数値を入力") '【Resume】移動地点1
MsgBox MyVal & "が入力された" '【Resume Next】移動地点2

ErrResume: '【Resume 行ラベル】移動地点3
    Exit Sub
    
ErrLabel:
    Select Case MsgBox("インプットボックスに再度文字を入力しますか", vbYesNoCancel)
    Case vbYes
        Resume '移動地点1へ
    Case vbNo
        Resume Next '移動地点2へ
    Case vbCancel
        Resume ErrResume  '移動地点3へ
    End Select

End Sub



▼インプットボックスの表示▼
InputBoxに入力された文字を格納する変数のデータ型はLongとしたが、敢えて文字列を入力することでエラーをおこす


▼メッセージボックスの表示▼
はいを押下→再度InputBoxを表示
いいえを押下→そのままエラーが発生(エラーを無視するステートメントを記述していないため
キャンセルを押下→処理を抜ける