エラー処理(On Error ステートメント / Errオブジェクト)
On Error ステートメントの使い方
On Error GoTo line
  statements(通常の処理)
line:
  err_statements(エラー発生時の処理)
On Error Resume Next
On Error GoTo 0
【各構文の説明】
- 構文 1 ・・・ On Error GoTo line の後のコード(statements)の中ででエラーが発生した場合、コードを実行する位置が、指定した行ラベル(line:)の位置へと移ります(err_statements を実行)。
 - 構文 2 ・・・ 実行時エラーが発生してもプログラムを中断せず、エラーが発生したステートメントの次のステートメントから実行を継続します。
 - 構文 3 ・・・ 現在のプロシージャに含まれる使用可能なエラー処理ルーチンを無効にします。
 
On Error ステートメント使用例
On Error GoTo ステートメント
| 
					 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21  | 
						Sub sample_error01()     Dim i     On Error GoTo ErrLabel     For i = 1 To 4         Worksheets(i).Activate     Next     Exit Sub ErrLabel:     MsgBox "エラー番号: " & Err.Number & Chr(13) & Err.Description End Sub  | 
					
Err.Number、Err.Description は、Err オブジェクトを参照
ここでは、ワークシートは、Sheet1,Sheet2,Sheet3 の3つのシートが存在。Worksheets(4) をアクティブにしようとするとエラーが発生します。
On Error GoTo ステートメント実行結果
On Error Resume Next ステートメント
| 
					 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18  | 
						Sub sample_error02()     Dim i     Dim StrShtName As String     On Error Resume Next     For i = 0 To 3         StrShtName = StrShtName & Chr(13) & Worksheets(i).Name     Next i     MsgBox StrShtName End Sub  | 
					
ここでは、ワークシートは、Sheet1,Sheet2,Sheet3 の3つのシートが存在。ワークシートを番号で指定する場合(Worksheetsコレクション)は、一番左側のシートから順に、1、2、3・・・と数えます。上記例で、Worksheets(0) は存在しないのでエラーが発生しますが、On Error Resume Next ステートメント では、エラーが発生しても中断せず、その次のステートメントから実行を継続します。
On Error Resume Next ステートメント実行結果
On Error GoTo 0 ステートメント
| 
					 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21  | 
						Sub sample_error03()     On Error GoTo ErrLabel     Worksheets("Sheet10").Activate     On Error GoTo 0     MsgBox Range("A1").Value     Exit Sub ErrLabel:     MsgBox "エラー番号: " & Err.Number & Chr(13) & Err.Description End Sub  | 
					
ここでは、ワークシートは、Sheet1,Sheet2,Sheet3 の3つのシートが存在。存在していない Sheet10 をアクティブにしようとするとエラーが発生します。
On Error GoTo 0 ステートメント実行結果
Err オブジェクト
<プロパティ>
result = Err.Property
<メソッド>
Err.Method
実行時エラーが発生すると、そのエラーを識別するための情報など、エラー処理で利用可能な情報が、Err オブジェクトに格納されます。
【Err オブジェクトのプロパティ・メソッド一覧】
| プロパティ(Property) | 内 容 | 戻値型(result) | 
| Number | エラーの種類を表すエラー番号 | Long 型 | 
| Description | エラー内容 | String 型 | 
| HelpFile | ヘルプファイル | String 型 | 
| HelpContext | ヘルプファイルのトピックに対応するコンテキスト番号 | Long 型 | 
| LastDLLError | 最後にダイナミックリンクライブラリ(DLL)を呼び出したときのエラーコード | Long 型 | 
| Source | エラーの発生元のオブジェクトまたはアプリケーションの名前を示す文字列式 | String 型 | 
| メソッド(Method) | 内 容 | 戻値型(result) | 
| Clear | エラー情報をクリア | – | 
| Raise | 実行時エラーを生成 | – | 
Err オブジェクトの各プロパティは、エラー処理ルーチン内の Exit Sub、Exit Function、Exit Property、Resume Next ステートメントの後で、0 または長さ 0 の文字列 (“”) に自動的にリセットされます。
明示的にリセットしたい場合は、Clear メソッドを使います。
関連記事
-  
            
              - 
      
プロシージャ内のサブルーチンへ移動(GoTo ステートメント)
GoTo ステートメント GoTo ステートメントは、指定したラベルのサブルーチ …
 
-  
            
              - 
      
プロシージャを呼び出す(Call ステートメント)
プロシージャを呼び出す プロシージャ内から、別のプロシージャを呼び出すには、Ca …
 
-  
            
              - 
      
ユーザー定義型変数を使う(Type ステートメント)
Type ステートメントを使う Type ステートメントを使うと1つまたは複数の …
 
-  
            
              - 
      
プロシージャを作成する( Sub, Function )
プロシージャを作成する プロシージャとは、実行時に 1 つの単位として処理される …
 
-  
            
              - 
      
条件分岐(Select Case ステートメント)
Select Case ステートメントの使い方 【構文】 Select Case …
 
-  
            
              - 
      
繰り返し処理(Do…Loop ステートメント)
Do…Loop ステートメントの使い方 【構文 1】 Do [ Wh …
 
-  
            
              - 
      
繰り返し処理(For…Next ステートメント)
For…Next ステートメントの使い方 【構文】 For coun …
 
-  
            
              - 
      
プロシージャ内のサブルーチンへ移動(GoSub…Return ステートメント)
GoSub…Return ステートメント GoSub ステートメント …
 
-  
            
              - 
      
引数の参照渡し・値渡し( ByRef, ByVal )
引数の「参照渡し」と「値渡し」 「参照渡し」とはプロシージャに引数として変数を渡 …
 
-  
            
              - 
      
省略可能な引数・デフォルト値を設定( Optional キーワード )
Optional キーワード Optional キーワードを使用するとプロシージ …
 
        

