こんにちは、Ryoです。
2019年に入り1月ももう半ばですね。私は昨年同様に何かと慌ただしく過ごしていますが、マイペースで今年も更新していきたいと思いますので本年もどうぞよろしくお願い致します。
今回の内容は使いどころが限られますが、Raiseメソッドを利用しVBAでの処理中に想定されるエラー(例:未入力、誤字など)をユーザー側で定義し発生させることでトラブルシューティングなどと関連付けさせることができますので知っておくと何かと有用です。今回はその内容について書いていきます。
1.サンプル概要
以下画像内のセルA1に文字が入力されていますが、この中に「Sample」という文字列が含まれていない場合はエラーが発生するサンプルコードとしています。
指定文字が含まれていませんから、この状態で実行すれば当然ながらエラーとなりますが、ここで定義したのは「エラーNo.:1234」「エラー内容:指定文字(Sample)がありません」となります。
このように使用上想定されるエラーなどを定義しておくことで、トラブルシューティングなどをまとめやすくし、使い勝手を良くすることができます。
2.サンプルコード
Sub Sample1() 'エラー処理の開始 On Error GoTo Err1 'セルA1に入力された文字列内に「Sample」の有無を確認 If InStr(Cells(1, 1).Value, "Sample") = 0 Then '指定文字列が無い場合、エラーを発生させる 'ユーザー定義エラー番号は513~65535内で指定 Err.Raise Number:=1234, _ Description:="指定文字(Sample)がありません" End If '指定文字列が有るなら処理終了 Exit Sub Err1: '発生したエラーのNo.と内容をメッセージボックスで表示 MsgBox "エラーNo.:" & Err.Number & vbCrLf _ & "エラー内容:" & Err.Description, vbCritical, _ "[error message]" End Sub
エラーを強制的に発生させるにはRaiseメソッドを利用することで実施可能です。
オブジェクト.Raise number,source,description,helpfile,helpcontext
構文はこの通りですが、引数number以外は省略可能です。詳細はこちらのMSDNをご参照ください。
本サンプルではセルA1の文字列をチェックし、「Sample」という文字が含まれない場合にエラーを強制的に発生させています。その際にRaiseメソッドを使って引数numberとdescriptionを
Err.Raise Number:=1234, _
Description:=”指定文字(Sample)がありません”
という形で指定することでエラーNo.「1234」、内容が「指定文字(Sample)がありません」というエラーを発生させています。
後はエラー処理を行うOn Error GoToステートメントで指定した「Err1」ラベルに処理が移り、エラーNo.と内容をメッセージボックスで表示します。
◆参考
指定できるエラーNo.は「0~65535」の範囲の値になりますが、「0~512」はシステムエラー用に予約されているので、ユーザー定義エラーとして使用できるのはサンプルコード内に記載した通り「513~65535」になります。
3.まとめ
今回の内容は使う機会も限られるとは思いますが、私の場合はVBAで計測制御を行う際に想定されるエラーが多数あるので、そこに定義しておき、使用マニュアルなどのトラブルシューティング上にエラーNo.と対処を記載しておくことで運用しやすいようにしています。
上手く活用するとメンテナンス性も向上しますから、知っておいて損はないと思いますので、使用機会があればご検討くださいませ。
以上、ユーザーで定義したエラーを強制的に発生させる内容についてでした!今回の記事が何かの参考になれば幸いです。
Ryo