VBAでもユーザに利用してもらう場合などは、例外が発生しても落ちないように考慮が必要です。
そこで、簡易的に例外を捕まえてメッセージを表示するVBAを使っているので紹介します。
実際に作ったファイルはこちらから無料でダウンロードできます。
エクセルの仕様
仕様は、「あ、い、う、え、お」と本当は出力したいです。
ただ、一部存在しないシート名を指定していることで、例外が起こるようになっています。
マクロが無効にされる場合
ダウンロードすると、以下のような警告が表示されることがあります。
ファイルを右クリックして、プロパティから「許可する」にチェックを入れて下さい。
コードの解説
コード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
'============================== '目的 : '============================== Sub test_Click() '------エラー時はErrCatchラベルへ------ On Error GoTo ErrCatch 'ファイルパスの書き込みエリアをクリアする ThisWorkbook.Sheets("Sheet1").Columns("D").ClearContents 'D1~5のセルに数字を記載する ThisWorkbook.Sheets("Sheet1").Range("D1") = "あ" ThisWorkbook.Sheets("Sheet1").Range("D2") = "い" ThisWorkbook.Sheets("Sheet1").Range("D3") = "う" ThisWorkbook.Sheets("Sheet20").Range("D4") = "え" '存在しないシートを指定 ThisWorkbook.Sheets("Sheet1").Range("D5") = "お" MsgBox "完了しました。" 'エラーキャッチ ErrCatch: ' エラーの場合、エラーメッセージを表示する Call ShowErrMsg End Sub '============================== '目的 :エラーの場合、エラーメッセージを表示する '============================== Public Sub ShowErrMsg() 'エラーがあればメッセージ表示 If Err.Number <> 0 Then MsgBox "想定外のエラーが発生しました。" & vbCrLf + _ "エラー番号:" + CStr(Err.Number) & vbCrLf + _ "エラーの種類:" + Err.Description End If End Sub |
解説
7行目で、例外があった場合、「ErrCatch」というラベルに移動するようになっています。
13行目~17行目で「あいうえお」と書き込むように書いています。
ただ、16行目は存在しないシート名「sheet20」が指定されているため例外が発生します。
32行目でエラー時のメソッドが記載してあります。
例外があった場合、Err.Numberが0以外となります。
0以外(エラーがあった)場合、エラー内容をメッセージ表示させています。