« 改行記号と段落記号について | トップページ | 「コントロール」のおすすめ入門書 »

2009年1月 5日 (月)

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のしるしのところへ進むので、処理としては同じものと思うのですが、なぜかうまくいくようになりました。

とりあえず解決してよかったのですが、解決できた理由はよくわかっていません。

|

« 改行記号と段落記号について | トップページ | 「コントロール」のおすすめ入門書 »

日記・コラム・つぶやき」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/519619/43648591

この記事へのトラックバック一覧です: On Errorの設定があるのに、エラー時に認識されない場合:

« 改行記号と段落記号について | トップページ | 「コントロール」のおすすめ入門書 »