VB.NET, C#, PowerShellを使用しているエンジニアのためのサイト。
基本的な使用方法から開発で役立つTipsまで幅広く取り扱っています。
Update 2018/12/07
< Prev Tips
エラー処理とは、プログラムが何かしらのエラーで処理が行えなくなった際に、不具合の影響が最小限で収まるように対処することをいいます。
VBAでのエラー処理は、「On Error」ではじまるステートメントを使用します。
On Errorステートメントには以下のものがあります。
On Error GoTo ラベルは、エラーが発生した時に、ラベルの位置に処理が移動します。
例えば、以下の例では8行目の計算でエラーが発生します(0で割ることができないため)。
エラーが発生すると13行目のErrLabelに移動して、「エラー発生」が表示されます。
エラー発生時は10行目の「計算が終了しました。」は表示されません。
Option Explicit
Sub calc()
Dim x As Integer
On Error GoTo ErrLabel
'ここでエラーが発生する
x = 3 / 0
MsgBox "計算が終了しました。”
Exit Sub
ErrLabel:
MsgBox "エラー発生"
End Sub
On Error Resume Nextは、エラーが発生すると、エラーの次の行から再開して動作するというものです。値渡しと参照渡しの2種類があります。
例えば、以下の例では8行目の計算でエラーが発生します(0で割ることができないため)。
エラーが発生すると10行目に移動しますので「計算が終了しました」のメッセージが表示されて、プロシージャを抜けます。
Option Explicit
Sub calc()
Dim x As Integer
On Error Resume Next
'ここでエラーが発生する
x = 3 / 0
MsgBox "計算が終了しました。"
Exit Sub
End Sub
Resume Nextと「On Error Goto ラベル」を組み合わせて使用することができます。
以下に例を示します。
8行目でエラーが発生すると「ErrLabel」に移動して処理を行い、17行目のResumeNextに到達すると、エラーが発生した次の行に移動して処理を行います。
よって、「エラー発生」のメッセージを表示した後に「計算が終了しました」のメッセージが表示されます。
Option Explicit
Sub calc()
Dim x As Integer
On Error GoTo ErrLabel
'ここでエラーが発生する
x = 3 / 0
MsgBox "計算が終了しました。"
Exit Sub
ErrLabel:
MsgBox "エラー発生"
Resume Next
End Sub
「On Error Goto ラベル」はラベルの間までに発生したエラーを補足し、「On Error Resume Next」はプロシージャを抜けるまでの間のエラーを補足します
On Error Goto 0は、On Error Goto ラベル もしくは、On Error Resume Next 以降に配置します。
On Erro Resume 0 以降は、エラーの補足を無効にするという特徴があります。
以下に例を示します。
6行目で「On Error Goto ErrLabel」がありますので、22行目の「ErrLabel」までのに発生したエラーを補足することができます。
しかし、14行目に「On Error GoTo 0」がありますので、15行目以降で発生したエラーは補足されなくなります。
Option Explicit
Sub calc()
Dim x As Integer
On Error GoTo ErrLabel
'ここでエラーが発生する
x = 3 / 0
MsgBox "計算が終了しました。"
On Error GoTo 0
x = 5 / 0
MsgBox "5 ÷ 0 を計算できませんでした"
Exit Sub
ErrLabel:
MsgBox "エラー発生"
Resume Next
End Sub
プログラムにはエラーが付きものです。このエラーの原因を調べる際に役に立つのが、エラー番号とエラーメッセージです。
エラー番号はErr.Noで取得することができ、エラーメッセージはErr.Descriptionで取得することができます。On Error Goto 0は、On Error Goto ラベル もしくは、On Error Resume Next 以降に配置します。
以下に、Err.NoとErr.Descriptionの使用例を示します。
エラーが発生すると、ErrLabelに移動してメッセージボックスにエラー番号とエラーメッセージを表示しています。
エラー番号は、発生したエラー原因ごとに付けられている番号で、その内容はErr.Messageで取得できます。
様々なエラーが発生する可能性がある場合は、Select Case文などでErr.Noを判定して、エラーごとに対応することが可能になります。
Option Explicit
Sub calc()
Dim x As Integer
On Error GoTo ErrLabel
'ここでエラーが発生する
x = 3 / 0
MsgBox "計算が終了しました。"
ErrLabel:
MsgBox Err.Number & ":" & Err.Description
End Sub