|
こんばんは。
最近、他の場所でおなじようなことを書きました。
注意しなくてはならないことは、
On Erorr Gotoはエラー発生時にエラー処理ルーチンに
処理をジャンプさせるものであることと、
On Erorr Goto でジャンプした先(エラー処理ルーチン)では、
エラー処理が有効にならないことです。
エラー処理部でのエラーはトラップできません。
エラー処理ルーチンの終了後に、実行を再開するには、
Resume ステートメントを使わなくてはなりません。
まとめると、
On Error Goto でジャンプすると、エラー処理部の中にいることになり、
Resumeステートメントでエラー処理部から戻るまで、
エラートラップが有効に成らない。
(エラートラップの無限ループに陥らないための配慮と思って下さい。)
簡単になおすと、以下。
Sub Test()
On Error GoTo Err_Handeler1
Sheets("A").Select
Range("B11").Select
Selection.Copy
Range("E1").Select
Sheets("X").Select
Range("F8").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Skip01:
On Error GoTo Err_Handeler2
Sheets("B").Select
Range("B11").Select
Application.CutCopyMode = False
Selection.Copy
Range("E1").Select
Sheets("X").Select
Range("G8").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Skip02:
On Error GoTo Err_Handeler3
Sheets("C").Select
Range("B11").Select
Application.CutCopyMode = False
Selection.Copy
Range("E1").Select
Sheets("X").Select
Range("H8").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Skip03:
On Error GoTo 0
Exit Sub
Err_Handeler1:
Resume Skip01
Err_Handeler2:
Resume Skip02
Err_Handeler3:
Resume Skip03
End Sub
もうちょっと短くすると以下。
Sub Test2()
Dim ShList As Variant
ShList = Array("A", "B", "C")
For i = 0 To 2
On Error GoTo Err_Handler
Sheets(ShList(i)).Range("B11").Copy
On Error GoTo 0
Sheets("X").Cells(8, i + 6).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
skip:
Next
Exit Sub
Err_Handler:
Resume skip
End Sub
|
|