On Errorの設定があるのに、エラー時に認識されない場合
自分用のメモです。背景の詳細説明は省略。
●状況
ループ処理のなかで、連続してエラーと判定される状況下で起きました。
エラーが起こるのは、下記のコードの着色部分です。
ファイル名を書き換える(ファイルを移動する)プログラムの一部です。
For Cnt1 = 0 To myCount
If Len(file_Name(Cnt1)) = 0 Then GoTo n
myOldName = folder_Path & "\" & file_Name(Cnt1) '移動元ファイル
myNewName = myNewPath & "\" & file_Name(Cnt1) '移動先ファイル
If Len(Dir(myOldName)) > 0 Then
Name myOldName As myNewName
Else
GoTo errorhandler
End If
n:
Next Cnt1
1度目のエラーはエラーと認識されるために、errorhandlerに制御が進むのですが、2度目のループに入ったときには、エラーが起きたときに「エラー表示」ウィンドウが立ち上がって、プログラムが終了してしまいました。
つまり、エラーが起きるのに、errorhandlerに制御が進んでくれないという状態でした。
●プログラム文
On Error GoTo errorrhandler
・・・・・・
errorrhandler:
If Err = 58 Then
GoTo n
End
End If
nの記号は、特定の場所への制御を飛ばす場合のしるしです。
エラーが起こった数行後のコードに進みます。
●解決策
errorrhandler:
If Err = 58 Then
Resume Next
End
End If
にしたら、解決しました。
resume nextの場合、どちらにしろnのしるしのところへ進むので、処理としては同じものと思うのですが、なぜかうまくいくようになりました。
とりあえず解決してよかったのですが、解決できた理由はよくわかっていません。

コメント