🗓️

おおお。レガシーExcelVBA。けどなんだかんだでいっつも便利でお世話になってるのでサンプルコードを上げてみる♪♪♪

4 min read

<障害発生日>
2006年10月頃からつい最近まで...かな(;^_^A

<ざっくりとした環境情報>
OS:Windows10
言語:Microsoft Visual Basic for Applications 7.1
環境:Microsoft® Excel® for Microsoft 365 MSO (16.0.14326.20384) 64 ビット

普段の活動から考えるとちょっと寄り道。。。けど前々から書きたかったExcelVBAの例外処理のTipsをこのタイミングで投稿する。

はいみなさまおはようございま~す✨
今朝のガガミは原点回帰、個人事業主であるカガミの屋号『あったらいいね!』に立ち返って、

"ネットでいくら探しても、実務で使うExcelVBAに役立ちそうなエラー処理のサンプル無くね!?"

というご要望があるかもしれないと思い、ExcelVBAでの例外処理のときカガミがいつも『決め打ち』してるコードを投稿しようと思いました♪♪♪

まぁ我流でやってきた中での結論なんで

"それ望んでたのと全然ちげぇーよ(怒)"

みたいなご批判とか多々きそうですけれど(--;

と、それはさておき、さっそく本題に入りたいと思います♪

VBAでの例外処理のポイント:エラー処理の最後に『Endステートメント』を入れる♪

はい、今日お伝えしたいことは実はたったこれだけになります。。。
様々な現場でツール開発のご依頼があり、そのたんびに試行錯誤しながら作ってきた中でのカガミなりの結論れふ。。。

それではコード公開✨

Private Sub errProcess(ByVal functionName As String _
                        , ByVal errNo As String _
                        , ByVal errDiscription As String)

    'メッセージパーツ作成
    Dim messageParts01 As String
    Dim messageParts02 As String
    Dim messageParts03 As String
    Dim messageParts04 As String
    
    '補足)↓『vbNewLine』で改行するお♪
    messageParts01 = "【下記の場所でエラーが発生しました。】" + vbNewLine
    messageParts02 = "処理名:" + functionName + vbNewLine
    messageParts03 = "エラーNo.:" + errNo + vbNewLine
    messageParts04 = "内容:" + errDiscription + vbNewLine
    
    'メッセージ作成
    Dim title   As String
    Dim message As String
    title = "エラー!!"
    message = messageParts01 + messageParts02 + messageParts03 + messageParts04
    
    'メッセージ表示(※追加開発してログなどに吐いても良し)
    MsgBox message, vbCritical, title
        
        
    '※※※ここが重要!!※※※
    '下記はEndステートメント。
    'エラーが出たらそこですべての処理を終わらせる!!
    End
    
End Sub

。。。あっそ。すかね(^^;

ちなみに、動かしてみるとどーなるのこれ?
と思われる方は下記のソースを『コピって』ください♪♪♪

Option Explicit

'***このソースの使い方♪♪♪***************************************************
'* このソースの趣旨)
'*   ExcelVBAにおいて、エラーが発生したら、エラーメッセージを出して処理を中断したい。
'*   そういった場合のソースのサンプル。
'*
'* 使用例)
'*   メニュー -> 表示 -> イミディエイトウィンドウ
'*   ->『Call main("02")』など『番号』を指定して動かしたりしちゃってください。
'*
'* ※注意事項)
'*   より良い方法はいくらでもあるかと思います。
'*   ので、このサンプルコードを絶対視しないでください。
'*
'******************************************************************************
Public Sub main(ByVal errRasePosition As String)
On Error GoTo errProcess
    
    Select Case errRasePosition
        Case "01"
            Call sub01
        Case "02"
            Call sub02
        Case "03"
            Call func03
        Case Else
            Err.Raise "hoge"
    End Select
    
errProcess:

    Call errProcess("main()" _
                    , Err.Number _
                    , Err.Description)

End Sub

Private Sub sub01()
On Error GoTo errProcess

    Err.Rase "hoge"

errProcess:

    Call errProcess("sub01()" _
                    , Err.Number _
                    , Err.Description)
End Sub

Private Sub sub02()
On Error GoTo errProcess

    Err.Rase "hoge"

errProcess:

    Call errProcess("sub02()" _
                    , Err.Number _
                    , Err.Description)
End Sub

Private Function func03() As Boolean
On Error GoTo errProcess

    Err.Raise "hoge"

errProcess:

    Call errProcess("func03()" _
                    , Err.Number _
                    , Err.Description)
End Function

Private Sub errProcess(ByVal functionName As String _
                        , ByVal errNo As String _
                        , ByVal errDiscription As String)

    'メッセージパーツ作成
    Dim messageParts01 As String
    Dim messageParts02 As String
    Dim messageParts03 As String
    Dim messageParts04 As String
    
    '補足)↓『vbNewLine』で改行するお♪
    messageParts01 = "【下記の場所でエラーが発生しました。】" + vbNewLine
    messageParts02 = "処理名:" + functionName + vbNewLine
    messageParts03 = "エラーNo.:" + errNo + vbNewLine
    messageParts04 = "内容:" + errDiscription + vbNewLine
    
    'メッセージ作成
    Dim title   As String
    Dim message As String
    title = "エラー!!"
    message = messageParts01 + messageParts02 + messageParts03 + messageParts04
    
    'メッセージ表示(※追加開発してログなどに吐いても良し)
    MsgBox message, vbCritical, title        
        
    '※※※ここが重要!!※※※
    '下記はEndステートメント。
    'エラーが出たらそこですべての処理を終わらせる!!
    End
    
End Sub

<実行イメージ>

結びに

はい、とりあえず今日は以上です。
それではまた~✨✨✨

Discussion

ログインするとコメントできます