Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


9963 / 13644 ツリー ←次へ | 前へ→

【24543】エラー処理について こまったさん 05/4/25(月) 14:38 質問[未読]
【24544】Re:エラー処理について m2m10 05/4/25(月) 14:59 発言[未読]
【24545】Re:エラー処理について ウッシ 05/4/25(月) 15:12 回答[未読]
【24547】Re:エラー処理について こまったさん 05/4/25(月) 15:18 お礼[未読]
【24546】Re:エラー処理について こまったさん 05/4/25(月) 15:13 お礼[未読]

【24543】エラー処理について
質問  こまったさん  - 05/4/25(月) 14:38 -

引用なし
パスワード
   はじめまして。エクセル2000で簡単なプログラムを作ってみているのですが、on error go to を使ったエラーの処理がうまくいかなくて困っています。
お力をお貸しいただければ幸いです。

以下のような感じなのですが・・・

sub test()
dim openfile
range("A1").activate
1:activecell.offset(1,0).activate
if activecell="" then
  end
else
  openfile=activecell.text
  on error go to errmsg
  Workbooks.Open Filename:="C:\デスクトップ\" & openfaile & ".xls"
  Range("B1") = "あ"
  ActiveWorkbook.Save
  ActiveWorkbook.Close
  goto 1
end if
errmsg:
msgbox "残念!" & openfile & "は見つかりません"
GoTo 1
end sub

こんな感じです。
あるフォルダに、いくつかのファイルが入っていて、A1から下に向かってファイルの名前が書いてあります。
ファイルがそのフォルダに存在しないとき、エラーを感知してメッセージを表示して、再び go to で 1:から処理を続けるといった内容なのですが・・・。
1回目のエラーは思うように動作したのですが、2回目のエラーは感知せずに実行時エラー1004というメッセージが表示されてしまいます。

どのようにしたら良いのでしょうか?ご教示ください。

【24544】Re:エラー処理について
発言  m2m10  - 05/4/25(月) 14:59 -

引用なし
パスワード
   サンプルが有ります

1、ラベルが可笑しい

http://t_shun.at.infoseek.co.jp/My_Page/Excel-VBA/vba_page21.htm

【24545】Re:エラー処理について
回答  ウッシ  - 05/4/25(月) 15:12 -

引用なし
パスワード
   こんにちは

直すとしたらこんな感じです。

Sub test()
  Dim openfile
  Range("A1").Activate
  On Error GoTo errmsg
1:   ActiveCell.Offset(1, 0).Activate
  If ActiveCell = "" Then
    Exit Sub
  Else
    openfile = ActiveCell.Text
    Workbooks.Open( _
            FileName:="C:\デスクトップ\" & openfile & ".xls" _
            ).ActiveSheet.Range("B1").Value = "あ"
    ActiveWorkbook.Save
    ActiveWorkbook.Close
    GoTo 1
  End If
errmsg:
  MsgBox "残念!" & openfile & "は見つかりません"
  Err.Clear
  GoTo 1
End Sub

この処理の場合、「On Error 〜」は使わないくてもいいと思います。
こんな感じで、

Sub test1()
  Dim openfaile As String
  Dim bk    As Workbook
  Dim r     As Range
  
  For Each r In Range("A2", Range("A65536").End(xlUp))
    If Not IsEmpty(r.Value) Then
      openfaile = "C:\デスクトップ\" & r.Value & ".xls"
      If Len(Dir(openfaile)) = 0 Then
        MsgBox "残念!" & openfaile & "は見つかりません"
      Else
        Set bk = Workbooks.Open(FileName:=openfaile)
        bk.ActiveSheet.Range("B1").Value = "あ"
        bk.Save
        bk.Close
      End If
    End If
  Next
End Sub

【24546】Re:エラー処理について
お礼  こまったさん  - 05/4/25(月) 15:13 -

引用なし
パスワード
   m2m10 さん
早速のご教示ありがとうございます。
Resumeを使うことで解決しました。
どうも有り難うございました。

【24547】Re:エラー処理について
お礼  こまったさん  - 05/4/25(月) 15:18 -

引用なし
パスワード
   ウッシ さん

早速のご教示有り難うございます。
Err.Clear なんて使い方もできるんですね。

勉強不足を痛感しています。

>この処理の場合、「On Error 〜」は使わないくてもいいと思います。
>こんな感じで、
>
>Sub test1()
>  Dim openfaile As String
>  Dim bk    As Workbook
>  Dim r     As Range
>  
>  For Each r In Range("A2", Range("A65536").End(xlUp))
>    If Not IsEmpty(r.Value) Then
>      openfaile = "C:\デスクトップ\" & r.Value & ".xls"
>      If Len(Dir(openfaile)) = 0 Then
>        MsgBox "残念!" & openfaile & "は見つかりません"
>      Else
>        Set bk = Workbooks.Open(FileName:=openfaile)
>        bk.ActiveSheet.Range("B1").Value = "あ"
>        bk.Save
>        bk.Close
>      End If
>    End If
>  Next
>End Sub


こちらは、これからゆっくりと解読して学習させていただきます。
どうも有り難うございました。

9963 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free