- ベストアンサー
ExcelVBAでのエラー処理について
Excel2003のVBAでマクロを作成しています。 On Error Gotoを使用して開こうとしたブックを開こうとして目的のブックがなかった場合のエラー処理コードを書いたのですがうまくエラー処理行に飛んでくれず、実行時エラーのメッセージがでてマクロがとまってしまいます。 コードを見返したところ記述ミスはないようなのですが、考えられるミスは何なのでしょうか?
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 ご質問者さんが、コードを出せばすぐに解決しただろうと思いますが、なかなかつきませんので、私も書かせていただきます。 たぶん、思い込みなのでしょうけれど、あるレベルになると、何でも、エラートラップで解決できるだろうと思うのです。しかし、エラートラップというのは、本来、エラーの種類が見えていてこそ、エラートラップなのです。学習の段階でも、上級になっています。極力、エラーを排除するというコードを書くというのが基本です。その中で、どうしても、エラーが避けられないものに対して、エラートラップを使うようにします。 「ブックを開く」 というメソッドには、Error トラップが働かないのです。いくつか、こういうものがあるのですが、通常とは違ったエラーメッセージが出ているはずです。だから、実行時エラー 1004: が出るわけですね。 基本的に、ブック(ファイル)のあるなしは、Dir 関数で取るわけです。 例: -------------------------------------- Dim wb As Workbook Const Fname As String = "abc.xls" On Error GoTo ErrHandler If Dir(Fname) <> "" Then '<- ここでチェックします。 Set wb = Workbooks.Open(Fname) '処理 Else MsgBox Fname & " :ファイルが見つかりません", 48 End If Set wb = Nothing ErrHandler: If Err.Number > 0 Then MsgBox Err.Number & " : " & Err.Description End If --------------------------------------
その他の回答 (3)
- imogasi
- ベストアンサー率27% (4737/17069)
コードの実行時エラーのことを質問してながら関連箇所のコードも質問にあげないのはどうしてですか。 そんな非論理的なことでは、プログラムはつくれませんよ。 バグ探しは占いではないんだから。 また質問の話題の箇所は形式的にはエラーが出ることは少なく、データの状況(この際はフォルダ内のそのファイルの有無となど)とかかわる事項だと思うので、A.コードB。自分のコンピュタの状況 が必要だが、回答者はBは判らないので、回答は原理的には難しい。
お礼
ご回答ありがとうございました。 コードを開示できず、失礼いたしました。
- zap35
- ベストアンサー率44% (1383/3079)
On Error Goto文を記述する前にエラーになっているのではないですか? 以下のマクロでa.xlsがないときはエラールーチンに入りますよ マクロをステップ実行して、どのステートメントでどんなエラーが出るのかを補足してください。 Sub Macro1() On Error GoTo err1 Workbooks.Open Filename:="a.xls" err1: MsgBox "Error" End Sub >記述ミスはないようなのですが、考えられるミスは何なのでしょうか? コードを見ないと何ともいえません。想像で書いても当たる確率は低いです。早く結果を得たいならコードを開示するべきです。
お礼
ご回答ありがとうございます。 コード文はお書きいただきました内容と同様でした。 コードを開示できなくて大変失礼いたしました。
- popesyu
- ベストアンサー率36% (1782/4883)
その部分の具体的なコードを示した方が確実だと思いますが...
お礼
ご回答ありがとうございます。 その通りですね、失礼いたしました。
お礼
丁寧なご回答ありがとうございました。 コード内容が長かった事と、大変急いでおりましたのでコードも開示せずに失礼いたしました。 また、皆様への回答の記入が遅れまして申し訳ありませんでした。 Wendy02さんのご回答、エラー処理ルーチンについて捉え方について大変ありがたくご意見をいただきました。 また、わかりやすい解説コードもいただけましてありがとうございました。 Wendy02さんのコードでエラー回避することができました。 本当にありがとうございました。 また、次回ご質問させていただきます時にはコードを開示して明確に質問をさせていただくように致します。