【VBA】Err.Raiseメソッドの使い方を解説
今回はErr.Raiseメソッドについて解説します。 (Errオブジェクト)
Err.Raiseメソッドは自らエラーを発生させるメソッドになります。
あまりプログラムに慣れてない人にとっては、どうしてわざわざエラーを発生させるの?と疑問に思うかもしれません。
このメソッドのポイントは呼び出されたプロシージャ内でエラーを投げることにあります。
サンプルコードとともに説明するので、じっくりとご覧ください。
この記事では↓の内容が分かります。
- Err.Raiseメソッドの使い方
- Err.Raiseメソッドでエラーを投げる目的
Err.Raiseメソッドの使い方
Sub Sample1()
Err.Raise Number:=513, Description:="エラーが発生しました"
End Sub
サンプルコードを実行すると画像のような独自のエラーが発生します。
Err.Raiseメソッドの引数は↓のようになり、Number(エラー番号)については513~65535が使えます。
基本的にNumber(エラー番号)とDescription(説明)を記載して独自のエラーを発生させます。(エラー番号以外は省略可能です)
Err.Raise number, source, description, helpfile, helpcontext
引数 | 説明 |
---|---|
number | 必須です。 エラーの性質を識別する長整数型 (Long) です。 Visual Basic エラー (Visual Basic 定義エラーとユーザー定義エラーの両方) は、0 から 65535 の範囲にあります。 範囲 0 から 512 はシステム エラー用に予約されています。範囲 513 から 65535 は、ユーザー定義エラーに使用できます。Numberプロパティをクラス モジュールの独自のエラー コードに設定する場合は、エラー コード番号をvbObjectError定数に追加します。 たとえば、エラー番号513 を生成するには、vbObjectError+ 513 をNumberプロパティに割り当てます。 |
source | 省略可能。 エラーを生成したオブジェクトまたはアプリケーションの名前を示す文字列式です。Sourceプロパティをオブジェクトに対して設定する場合、project.classの形式を使用します。sourceを指定しない場合、現在の Visual Basicプロジェクトのプログラム ID が使用されます。 |
description | 省略可能。 エラーを説明する文字列式です。 指定しない場合、Numberの値が調べられます。 Visual Basic の実行時エラー コードにマップできる場合、Error関数によって返される文字列がDescriptionとして使用されます。Numberに対応する Visual Basic エラーがない場合、"アプリケーション定義またはオブジェクト定義のエラーです。" というメッセージが使用されます。 |
helpfile | 省略可能。 このエラーに関するヘルプを確認できるヘルプ ファイルへの完全修飾パスです。 指定しない場合、Visual Basic では、完全修飾された、Visual Basic ヘルプ ファイルのドライブ、パス、およびファイル名が使用されます。HelpFileを参照してください。 |
helpcontext | 省略可能。 エラーに関するヘルプを提供するhelpfile内のトピックを識別するコンテキスト ID です。 省略した場合、Numberプロパティに対応するエラーに応じた、Visual Basic ヘルプ ファイルのコンテキスト ID が使用されます (存在する場合)。HelpContextを参照してください。 |
Err.Raiseメソッドでエラーを投げる目的
ここからはErr.Raiseメソッドを使う目的を解説したいと思います。
JavaやC# などでTry – Catchの経験がある方は、同じことをしていると理解してください。
Sub Main()
'エラーがあればErrorTrapへ処理を飛ばす
On Error GoTo ErrorTrap
'別のプロシージャを呼び出し
CalledSub
Exit Sub
ErrorTrap:
MsgBox "エラー番号:" & Err.Number & vbLf & "概要:" & Err.Description
End Sub
Private Sub CalledSub()
'このプロシージャ内で問題があればエラーを投げる
Err.Raise Number:=513, Description:="CalledSubプロシージャでエラー"
End Sub
このサンプルコードはMainプロシージャがCalledSubプロシージャを呼び出す構造となっています。
MainプロシージャにはOn Error GoToを記載しており、エラーが発生するとメッセージを出して強制終了させます。
このような構造にしていれば、MainプロシージャはOn Error GoToを書くだけでエラーハンドリングができます。
呼び出されるCalledSubについてもErr.Raiseメソッドを入れておけば、異常が起こったときの対応をシンプルに記載できます。
このようにプロシージャを分割して処理するとき、Err.Raiseメソッドを活用することで異常処理をきれいにまとめることができます。
On Error GoToについて
On Error GoToについては↓の記事をご覧ください。