MacroCat@Siro - ExcelVBA・PHP・フリーランス

ExcelVBA、WEBスクレイピング、その他技術に関して書いていきます。

【ExcelVBA入門】ExcelVBAにおけるエラー処理の書き方

読者になる/フォローする

ExcelVBAにおけるエラー処理

f:id:sirosiro346:20170924144345j:plain

こんにちわ、にゃんたです。
ExcelVBAのエラー処理について、個人的な書き方についてメモ。


エラー処理とは?

エラー処理とは、ソース実行時エラーとなった場合の処理を記述して起き、
エラー原因の特定をしやすいようにしたり、予期せぬエラーでアプリ強制終了しないように防いだりできます。

ExcelVBAにおけるエラー処理

まずは、ソースコードを先にお見せします

'
' 機能    :エラー処理テスト
'
' 引数    :
'
' 返り値   :
'
' 備考    :
'
Sub errorTest()
On Error GoTo errorTest_Err '①エラー発生時にエラー処理へ移動
    'Main処理

    Dim intTest As Integer
    
    '②int型に入らない値を意図的に入れて、エラー発生
    intTest = 1000000
    
    '成功時のメッセージ
    MsgBox "エラーなし", vbInformation
        
    Exit Sub
    
'③エラー発生時の処理
divideBaseWord_Click_Err:
    
    '④エラーメッセージを表示
    MsgBox "エラーが発生しました。" & vbCrLf & _
                "【エラー箇所】:" & "Main.errorTest" & "です。" & vbCrLf & _
                "【エラー現象】:" & Err.Number & ":" & Err.Description, vbCritical
    Exit Sub
    
End Sub

①エラー発生時にエラー処理へ移動

On Error GoTo errorTest_Err
これは、エラー発生時に「On Error GoTo errorTest_Err」に飛ぶよ。
といった意味。

基本的には、「関数名 + _Err」が一般的だと思います。

③エラー発生時の処理

①でソースの最初に書いた「On Error GoTo errorTest_Err」の処理を書きます
On Error GoTo errorTest_Err:

④エラーメッセージの表示

ここでは、エラー発生時のメッセージを表示しています。

    '④エラーメッセージを表示
    MsgBox "エラーが発生しました。" & vbCrLf & _
                "【エラー箇所】:" & "Main.errorTest" & "です。" & vbCrLf & _
                "【エラー現象】:" & Err.Number & ":" & Err.Description, vbCritical
    Exit Sub

エラー箇所でエラー発生時のエラー場所がわかるようにしておき、エラー現象でエラーの減少を表示しています。
こうしておくことで、どこの処理で何のエラーが発生したのかわかるようになります。

エラーメッセージはこんな感じで出ます。
f:id:sirosiro346:20170924150630p:plain

関数名は残念なことに、自動で取得できないのでそこだけ注意!!

以上、エラー処理の書き方でしたー

ではではノシ