アクセス数アクセスカウンター

トップページ
更新・会社概要
ご 注 文 画 面
ご注文について
プライバシーポリシー
法律による表記
健康情報など
取扱商品一覧
お問い合わせ
パパナピ!

 


健康情報 ⇒ どこへ向かって・・・ ⇒ VBAトップ ⇒ エラーの場合の処理


プログラムですから、エラーは付き物です。

エラーが無いに越したことはありませんが、予期せぬ事態は起こるもの、とりあえず、エラーが出たけど何が原因か分からないような状況は避けたいものです。


一般的なのはタグ(エラーハンドラ)に飛ばす方法

On Error Goto Err_Handle

    ・・・

    ・・・

    Exit Sub

Err_Handle:

    ’エラーの場合の処理

End Sub


メッセージボックスなどで内容を表示すると分かりやすいです。

(例1)MsgBox Err.Description, vbCritical + vbOKCancel, "タイトル"

(例2)Result = MsgBox(Err.Description, vbCritical + vbOKCancel, "タイトル") ・・・


タイトル部分にプロシージャ名などを入れておくと、どの部分でエラーが起きたのか明確ですね。




エラーが起こることが予期できている場合には、エラーによるプログラム中断を防ぐことも有効です。

Sub aaa()
    Dim a As Single
    On Error Resume Next
    a = 10 / 0
    If Err.Number = 11 Then a = 0 
    Err.Clear
    On Error Goto 0

    MsgBox a
End Sub


4行目で10/0(10÷0)として、0で除算しようとしているため、エラーが発生します。

除算エラー(err.number=11)が出ていたら、aの値を「0」に変更して続行します。

※このエラー番号(11)は、一旦MsgBoxで表示して確認しました。

※割り算の答えに0はありませんが、無理やり0とした例です。


「On Error Goto 0」とすることにより、エラー時の振る舞いがリセットされます。


↓処理を再度続行させるには

Sub aaa()
    Dim a As Single
    Dim b As Single
    On Error GoTo Err_Handle
    a = 10 / b
    Err.Clear
    On Error Goto 0
    MsgBox a
    Exit Sub
Err_Handle:
    If Err.Number = 11 Then b = 1
    Resume
End Sub


変数bは初期化された状態では0ですので、上の例と同じように除算エラーが起こります。

resumeをエラーハンドラ内に置くことにより、エラー発生箇所を再度実行します。

この場合、a = 0 とはならないので、例としては馴染みませんが。




(C)山本健康堂 2005-2024