今回は、エラーを無視する方法について解説します。
ゼロ徐算など、場合によってエラーが発生してしまうリスクがある場合は、予めエラーを発生しない設定にしておいて、エラーが発生したかを別途判断したい場合もあるかと思います。
そういった場合にお役に立てると思いますので、ぜひ最後までお付き合いください!
- エラーを無視する方法が分かります。
- エラーハンドリングを再開させる方法も併せて紹介しています。
- コピペで使える実践的なサンプルコードを掲載しています。
前提
本記事でご紹介する「エラーを無視する」とは、エラーメッセージが出力されないようにしたうえで、マクロの一時停止をしないようにすることを指します。
基本的には、エラーが発生しても、マクロを止めたくない場合に使用します。
検知したいエラーが検知出来なくなるリスクもありますので、使用時にはご注意ください!
基本情報
On Error Resume Next ステートメント
エラーを無視する設定を有効にするには、On Error Resume Nextステートメントを使用します。
また、エラーハンドリングを再開するには、「On Error Goto 0」を使用します。
‘ エラーを無視
On Error Resume Next
‘ 一つ前のシートを選択する
ActiveSheet.Previous.Select
‘ エラーハンドリングを再開
On Error Goto 0
「ActiveSheet.Previous.Select」を実行する際、ActiveSheetが1つ目である場合にエラーが発生してしまいます。
「On Error Resume Next」を使用することで、エラーを無視して処理を続行することが可能です。
エラーが発生したかどうかの判定
On Error Resume Nextステートメントを実行した後に、エラーが発生したかどうかを確認するには、Errオブジェクトを参照します。
Public Sub outputErrorMsg()
' エラー無視設定を有効化
On Error Resume Next
' 1つ目のシートをActivate
ThisWorkbook.Worksheets(1).Activate
' Activeシートの1つ前をSelect ※エラー発生
ActiveSheet.Previous.Select
If Err.Number <> 0 Then
' エラーが発生した場合はエラー内容を出力
Debug.Print "エラー番号:" & Err.Number & vbCrLf & "エラー内容:" & Err.Description
End If
' エラーハンドリングを再開
On Error GoTo 0
End Sub
Errオブジェクトは、「On Error GoTo 0」を実行するとクリアされてしまいますのでご注意ください!
サンプルコード
エラーを無視する(ゼロ徐算考慮)
以下のサンプルコードでは、Mainプロシージャに指定した値を割り算します。
ゼロで割り算をしてしまった場合にエラーとなってしまう為、0徐算が発生した場合は 0を返却します。
Public Sub Main()
Dim num1 As Double
Dim num2 As Double
Dim result As Double
' 割り算を実行 ※ゼロ徐算された場合は 0 を返却
result = execDivide(100, 0)
End Sub
Private Function execDivide(ByVal num1 As Double, ByVal num2 As Double) As Double
Dim result As Double
' エラー無視設定を有効化
On Error Resume Next
' 割り算を実施
result = num1 / num2
If Err.Number <> 0 Then
' エラーが発生した場合は resultに0を代入
result = 0
End If
' 戻り値をセット
execDivide = result
' エラーハンドリングを再開
On Error GoTo 0
End Function
最後に
今回は、エラーを無視する方法について解説しました。
エラーは「とりあえず無視しておけばいいものではない」ので、取り扱いには十分ご注意ください。
本記事の内容は、当ブログの「シートの存在チェック」のサンプルコードでも使用していますので、興味があればご参照ください。
コメント