#263 On Error GoTo無しでエラーをチェックする方法 VBA

一般的に、エラーをトラップしてその内容に応じて後処理を分岐させるためには、「On Error GoTo ステートメント」を使います。しかし、On Error GoToステートメントを使わずに、エラーが発生したかどうかをそのコードの次の行で調べて処理を分岐させる方法もあります。

次の例では、bytNumというバイト型の変数に、InputBox関数を使ってユーザーが任意の値を入力できるようにしています。バイト型の変数には255までの数値しか代入することができませんので、それ以上の値が入力された場合にはエラー番号「6」の"オーバーフロー"エラーが発生します。また文字などを入力した場合には、エラー番号「13」の"型が一致しません"のエラーが発生します。そして、何もエラーが発生していないときはErrオブジェクトの「Number」プロパティには常に「0(ゼロ)」が保持されていますので、それによってエラーが発生していないことを確認することができます。

また通常は、「bytNum = InputBox(・・・・・・」の行でエラーが発生した場合、その行でプログラムはエラー停止します。そこで、この方法を使う場合には、事前に「On Error Resume Next」を宣言してことによってエラーが発生しても処理を続行するようにし、その次の行でエラーの有無をチェックするようにする必要があります。
Sub Err_Check()

  Dim bytNum As Byte

  On Error Resume Next

  bytNum = InputBox("255までの数値を入力してください!")

  Select Case Err.Number
    Case 0
      MsgBox "正しい数値が入力されました!", vbOKOnly + vbExclamation
    Case 6
      MsgBox "入力した値が大きすぎます!", vbOKOnly + vbExclamation
    Case 13
      MsgBox "文字が入力されました!", vbOKOnly + vbExclamation
  End Select

End Sub

実行例
インプットボックスからの入力

大きな値を入力したときの実行結果
| Index | Prev | Next |



T'sFactory
Accessで動く生産管理DB
Ureru Express
Webで使う販売顧客管理
Access開発&アドバイス
DB開発やテクニカルアドバイス
Copyright © T'sWare All rights reserved