エラー処理を行う上では、Errオブジェクトについて理解しておく必要があります。
はじめに
発生した実行時エラーに関する情報が Errオブジェクトのプロパティに入ります。
Errオブジェクトのプロパティを参照すれば、様々なエラーの情報を得ることができます。
Errオブジェクトのメソッドを使うことで、実行時エラーを生成したりプロパティを設定したりすることができます。
【この記事でわかることは】
・Errオブジェクトのプロパティとメソッドについて
Errオブジェクトのメソッド
プロパティ | 説明 |
---|---|
Clear | Errオブジェクトのプロパティ設定をすべて解除します。 |
Raise | 実行時エラーを生成します。 |
Clear メソッド
【構文】 object.Clear (object は、常に Errオブジェクトです)
Err.Clear
Errオブジェクトのプロパティは、次の場合Clearメソッドが自動的に呼び出されリセットされます。
Resume ステートメント、On Error ステートメント、Exit Sub、Exit Function、Exit Property が実行される場合です。
Raise メソッド
【構文】Err.Raise number[, source, description, helpfile, helpcontext]
※ [ ]内の引数は省略可能です。
Err.Raise メソッドを使って実行時エラーを生成し、プロパティを設定することができます。
引数 | 説明 |
number 必須 | エラーの性質を識別する長整数型 (Long) 0~65535 の範囲です。 範囲 0 から 512 はシステム エラー用に予約されています。 範囲 513 から 65535 は、ユーザー定義エラーに使用できます。 クラス モジュールの独自のエラーコードを設定する場合は、 エラーコード番号を vbObjectError定数+エラー番号で生成します。 |
[source] | エラー生成したオブジェクト又はアプリケーション名を示す文字列式です。 Sourceプロパティを設定する場合、project.class の形式を使用します。 指定しない場合、現在のVBプロジェクトのプログラム ID が使用されます。 |
[description] | エラーを説明する文字列式です。指定しない場合、Error関数が 返す文字列が使用されます。対応するVBエラーがない場合、 “アプリケーション定義またはオブジェクト定義のエラーです。” が使用されます。 |
[helpfile] | このエラーに関するヘルプを確認できるヘルプファイルへのフルパスです。 指定しない場合VBヘルプファイルのフルパスのファイル名が使用されます。 |
[helpcontext] | エラーのhelpfile内のトピックを識別するコンテキストIDです。 省略した場合、VBヘルプファイルのコンテキストIDが使用されます。 |
Err.RaiseをClearメソッドでエラー情報一覧を抽出
Errオブジェクトのメソッドを使って、Excel VBA のエラー情報一覧を書き出してみましょう。
Sub vbaErrNumberList()
Dim i As Long, r As Long: r = 2
Dim a As String, x As String
On Error Resume Next
'次のDescriptionと空白は除外して書き込む設定
x = "アプリケーション定義またはオブジェクト定義のエラーです。"
Cells(1, 1) = "Number"
Cells(1, 2) = "Description"
Cells(2, 1) = "下記以外"
Cells(2, 2) = x
For i = 1 To 65535
Err.Raise i 'Err.Raise + 番号でエラーを発生させる
a = Err.Description
If a <> x And a <> "" Then
r = r + 1 '書き込む行番号
Cells(r, 1) = i 'Err.Number
Cells(r, 2) = a 'Err.Description
End If
Err.Clear 'エラー情報をリセット
Next
End Sub
・12行目「Err.Raise i 」で、Err.Raiseメソッド + 番号(i)でエラーを発生させます。
・13行目「a = Err.Description」でエラーの説明を取得しています。
・19行目「Err.Clear」で発生させたエラー情報をリセットしています。
Excel VBA実行時のエラー番号とメッセージ一覧
次の表が Err.Raiseメソッドで発生させて取得できたエラー番号とメッセージの一覧です。
※説明の文字列にhttps://learn.microsoft.com/該当ページへのリンクを付けました。
Errオブジェクトのプロパティ
エラーメッセージのダイアログボックスは、Err オブジェクトのプロパティ (下表参照) を使用して作成します。よく使われるプロパティは Number と Description です。
プロパティ | 説明 |
---|---|
Number | エラーを示す数値を取得または設定します。 Errオブジェクトの既定プロパティです。 |
Description | エラーに関連付けられている説明の文字列を取得または 設定します。 |
HelpContext | ヘルプファイルのトピックに対応するコンテキストID を含む文字列式を返すか設定します。 |
HelpFile | ヘルプファイルへの完全修飾パスを含む文字列式を 設定または返します。 |
Source | 最初にエラーを生成したオブジェクトまたはアプリケーション の名前を指定する文字列式を取得または設定します。 |
Source プロパティには、プロシージャ名や関数名を設定するなどに利用されます。
メソッドとプロパティの使用方法サンプル
Errオブジェクトのメソッドとプロパティを使ったサンプルです。
Applicatuon.Inputboxを使って入力した番号のエラーを生成してメッセージさせます。
Sub vbaErrSample()
Dim n As Long 'Type:=1の戻り値用
Dim msg As String
On Error Resume Next
'promptを設定キャンセルされた場合戻り値は n = 0
msg = "発生させるエラー番号を入力してください。" & _
vbCrLf & "「0」入力又は「キャンセル」で終了!"
'リターン場所
IBOX:
n = Application.InputBox(msg, "エラー番号入力", , 1)
'入力データを検査
If n < 0 And n >= 65535 Then
MsgBox "入力範囲は 1~65535(数字)です!"
GoTo IBOX
ElseIf n = 0 Then
Exit Sub
Else '次の処理へ
End If
With Err 'Errオブジェクト
.Raise Number:=n, Source:="vbaErrSample" 'エラーを発生させる
MsgBox .Source & "内でエラーが発生しました!" & _
vbCrLf & "エラー番号" & .Number & ":" & .Description _
, vbCritical, "エラー通知"
.Clear 'エラー情報をリセット
End With
GoTo IBOX
End Sub
・20行目の Err.Raise Number:=n, Source:=”vbaErrSample” では、ソースプロパティにプロシージャ名を設定している例です。
・21行目の MsgBox で表示する Err.Source に “vbaErrSample” が反映されます。
・25行目に GoTo を入れて、数値入力に戻すようにしています。
まとめ(おわりに)
今回の記事はいかがでしたか? 少しでもお役に立てたなら幸いです(^^;
発生した実行時エラーの情報が Errオブジェクトのプロパティに入っていることお分かりいただけたと思います。
Err.Rise と Err.Clear メソッドの使い方もお分かりいただけたと思います。
Riseメソッドのプロパティに情報を設定することができることも確認できました。
エラーが発生した場所(行番号)も取得できるのですが今回は省略しています。また次の機会にその方法を紹介できればと思います。
★★★ ブログランキング参加中! クリックしてね(^^)/ ★★★
過去記事のサンプルファイルをダウンロードできます
この記事で使用したサンプルの登録はありません。
過去の記事で使用したサンプルファイルをダウンロードできるようにページを設置していますので、こちら(このリンク先)からご利用ください