エラー Errオブジェクト-Clear・Raiseメソッド

※より実装に近く表示させる為、コードの改行を避けています。スマホ等で閲覧される際は向きを変えてご覧ください。

※実装するバージョンによってはバージョンアップの仕様により動作しないコードもあります。実装には動作確認の上ご使用下さい。

エラー Errオブジェクト-メソッド

  • Clear メソッド

  • Err オブジェクトのすべてのプロパティの設定値をクリアします。
  • 構文
  • object.Clear
  • object には、Err オブジェクトへの参照を表すオブジェクト式を指定します。
  • 解説
  • Clear メソッドを使うと、エラーを処理した後で Err オブジェクトを明示的にクリアすることができます。
  • たとえば、On Error Resume Next ステートメントを使用した後でエラー処理を行うときなどです。
  • 次のいずれかのステートメントが実行されると、Clear メソッドが自動的に呼び出されます。
    • 任意の Resume ステートメント
    • Exit Sub ステートメント、
    • Exit Function ステートメント
    • Exit Property ステートメント
    • 任意の On Error ステートメント
  • メモ
  • 他のオブジェクトへのアクセス中に発生するエラーを処理するときには、On Error GoTo ステートメントよりも On Error Resume Next ステートメントの方が適しています。オブジェクトに対してアクセスするたびに Err オブジェクトの値を確認すると、エラーの発生時にコードがどのオブジェクトにアクセスしていたかが明確になります。
  • どのオブジェクトが Err オブジェクトの Number プロパティにエラー番号を設定したか、およびどのオブジェクトが最初にエラーを発生させたか (Err オブジェクトの Source プロパティに指定されるオブジェクト) を確認できます。
  • Clear メソッドの使用例
  • 次の例は、Clear メソッドを使って、Err オブジェクトの数値型のプロパティは 0 で、文字列型のプロパティは長さ 0 の文字列でリセットします。
  • このプログラムで Clear メソッドを使用しない場合、一度エラーが発生すると、その後の計算でエラーが発生するかどうかに関係なく、ループのたびにエラー メッセージ ダイアログ ボックスが表示されます。
  • Option Explicit


    Private Sub test1()
    ' 要素がすぐにオーバーフローするような配列を宣言します。
    Dim Result(4) As Integer
    Dim indx
    On Error Resume Next ' エラーのトラップを留保します。
    Do Until indx = 4
    ' 場合によってエラーを発生させ、エラーがない場合は結果を格納します。
    Result(indx) = Rnd * indx * 20000
    If Err.Number <> 0 Then
    MsgBox Err, , "発生したエラー: ", Err.HelpFile, Err.HelpContext
    Debug.Print indx & ":" & Err.HelpFile & " - " & Err.HelpContext
    Err.Clear ' Err オブジェクトのプロパティをクリアします。
    Else
    indx = indx + 1
    End If
    Loop
    '3:C:\PROGRA~1\COMMON~1\MICROS~1\VBA\VBA6\1041\VbLR6.chm - 1000006
    End Sub
  • Raise メソッド

  • 実行時エラーを生成します。
  • 構文
  • object.Raise number, source, description, helpfile, helpcontext
  • Raise メソッドの構文は、次の対象となるオブジェクトと名前付き引数から構成されています。
  • 指定項目 内容
  • object
    必ず指定します。Err オブジェクトへの参照を表すオブジェクト式を指定します。
  • number
    必ず指定します。指定するオブジェクトの Number プロパティに対応し、エラーに割り当てられているエラー番号を示す長整数型 (Long) の整数を指定します。Visual Basic のエラー (Visual Basic の組み込みのエラーとユーザー定義エラー) は、0 ~ 65535 の範囲の値です。0 ~ 512 の値はシステム エラー用に予約されているため、ユーザー定義のエラーに使用できるのは、513 ~ 65535 の範囲の値です。クラス モジュール内で独自のエラー番号を設定するときには、エラー番号を定数 vbObjectError に追加します。たとえば、エラー番号 1050 を発生させるには、名前付き引数 Number に vbObjectError + 513 を割り当てます。
  • source
    省略可能です。エラーを発生させたオブジェクトまたはアプリケーションを指定する文字列式です。オブジェクトにこのプロパティを設定するときには、project.class の形式で設定します。引数 source を指定しないと、現在の Visual Basic プロジェクトのプログラム ID が使われます。
  • description
    省略可能です。エラー メッセージを表す文字列式を指定します。省略した場合、名前付き引数 Number の値が調べられます。Visual Basic の実行時エラーの番号の中に、名前付き引数 Number の値に対応するものがあれば、Error 関数の戻り値が名前付き引数 Description として使われます。名前付き引数 Number に対応する Visual Basic のエラーがない場合は、メッセージ "アプリケーション定義またはオブジェクト定義のエラーです。" が使用されます。
  • helpfile
    省略可能です。このエラーに関するヘルプ トピックが含まれる Microsoft Windows のヘルプ ファイルの絶対パスを指定します。絶対パスを指定していない場合は、Visual Basic ヘルプ ファイルのドライブ、パス、およびファイル名が使用されます。
  • helpcontext
    省略可能です。名前付き引数 helpfile 内の指定したエラーに関するトピックのコンテキスト番号を指定します。このコンテキスト番号を省略すると、Number プロパティに対応する Visual Basic ヘルプ ファイルのエラー コンテキスト番号が存在するときには、その番号が使われます。
  • 解説
  • number を除き、すべての名前付き引数は省略可能です。
  • ただし、いくつかの引数を指定せずに Raise メソッドを実行したときに、Err オブジェクトの各プロパティの設定値がクリアされていないと、その値がエラーを表す値として使用されます。
  • Raise メソッドは、Error ステートメントの代わりに、実行時エラーを生成するために使用できます。
  • Err オブジェクトを使うと、Error ステートメントを使ってエラーを生成するときよりも豊富な情報を取得できるので、クラス モジュールを作成するときにエラーを生成するには Raise メソッドが便利です。
  • たとえば、Raise メソッドを使用すると、エラーを発生元が Source プロパティに設定され、エラーに対するオンライン ヘルプなどを参照できます。
  • Err オブジェクトの使用例
  • 次の例は、Err オブジェクトのプロパティを使って、エラー メッセージ ダイアログ ボックスのメッセージの内容を作成します。
  • Raise メソッドで Visual Basic のエラーを発生させる場合、エラーを発生させる前に Clear メソッドを使うと、Err オブジェクトのプロパティの値は既定値に戻ります。
  • Option Explicit


    Private Sub test1()
    Dim Msg
    ' エラーが発生したら、エラー メッセージを作成します。
    On Error Resume Next ' エラーのトラップを留保します。
    Err.Clear
    Err.Raise 6 ' "オーバーフロー" エラーを発生させます。
    ' エラーの発生をチェックした後、メッセージを表示します。
    If Err.Number <> 0 Then
    Msg = "エラー番号 " & str(Err.Number) & Err.Source & _
    " でエラーが発生しました。" & Chr(13) & Err.Description
    Debug.Print Msg
    MsgBox Msg, , "エラー", Err.HelpFile, Err.HelpContext
    End If
    'エラー番号  6VBAProject でエラーが発生しました。
    'オーバーフローしました。

    End Sub

 

 

2000年01月01日|[VBサンプルコード]:[Error]