[[20021110183942]] 『マクロでのOn Errorの基本的使い方について』(エータロー) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『マクロでのOn Errorの基本的使い方について』(エータロー)

 マクロのある個所に「実行文A」があり、また別の個所に別の「実行文B」があります。

 いずれの実行文も、エラーとなるケースがありまして、もしエラーとなった場合、

 「実行文A」でのエラーの際にはErrorA:に、「実行文B」でのエラーの際には

 ErrorB:に飛びたいのですが、このような場合、「On Error Goto 云々」はどのように

 使用するものなのでしょうか。教えてください。

 ErrorA:やErrorB:はマクロの最後の方に記述すればよいと思いますが、問題の実行文

 の直前にそれぞれ「On Error Goto ErrorA」などと、単にペアで記述すればよいので

 しょうか。「On Error Goto 0」などと組み合わせる話も耳にしたことがありますが・・。

 大雑把な説明で申し訳ありませんが、よろしくお願いいたします。

 (エータロー)


 On Error Goto XXX は基本的にエラーが発生する直前に書きます。

 ですから、実行文Aが11行目にあって実行文Bが21行目にあるとき

 10行目にOn Error Goto ErrAを書き、21行目にOn Error Goto ErrBを書いて

 プロシジャのEnd Subの直前にErrAとErrBを書きます。ErrAの直前で

 Exit Subを書いておかないとまともなときでもErrAなどを実行してしまいます。

 これで分かりますか?

 (kazu)

 Sub ABC()

   xxxxxxxxxx

   xxxxxxxxxx

   On Error Goto ErrA

   xxx実行文Axxxx

   xxxxxxxxxx

   xxxxxxxxxx

   On Error Goto ErrB

   xxx実行文Bxxxx

   xxxxxxxxxx

   xxxxxxxxxx

   Exit Sub

   ErrA:

      YYYYYYYYYY

   ErrB:

      ZZZZZZZZZZ

 End Sub


 どうもありがとうございました。ご説明の文章だけでも、理解を得るに十分でありま

 したところ、ご丁寧にもコード記述例までもご披露いただき、深く感謝申し上げます。

 難解極まるVBAにありまして、このエラー処理のコーディング方法はスラスラと頭に

 入れることができそうで、一安心です。 

 (エータロー)


 新たな疑問です。

 11行目と21行目と31行目にそれぞれ実行文A、B、Cがあり、A、Bの場合はERR1に、

 またCの場合はERR2に飛ばしたい場合ですが、この場合には「On Error Goto Error1」

 は、例えば第3行目などに1回だけ記述し、「On Error Goto Error2」は例えば第25行目

 あたりに記述するなどというのは可能でしょうか。

 それとも、「On Error Goto Error1」はあくまで第10行目と第21行目にそれぞれ記述し、

 「On Error Goto Error2」は第え〜と32行目にというように、律儀に”1対1”で

 なおかつ”実行文の直前”に記述しなければならないのでしょうか。恐らく、コード上、

 分岐やリターンが複雑に入り組んでいるような場合は、”1対1”、”実行文の直前”

 を厳守したほうが安全であり、そうでない単純なコードの場合には、冒頭のような手抜き

 記述も可能なのではないかと推測しますが、いかがなものでしょうか。

 試行錯誤等による自己調査をせず、質問させていただくことをお許しください。

 (エータロー)


 基本的にはOnErrorGotoを一度書くとそれを覚えています。

 したがってA以前にOnErrorGoto Err1を一回書いておいて、

 Cの前でOnErrorGoto Err2を書いておけば大丈夫です。

 例えばA,CのときErr1に飛ばしたくて、BのときだけErr2の場合は

 個別に書かなくてはだめです。

 一言言わせてもらえるなら、Err1にくるケースが複数あるのはトラブル時の

 調査を困難にする可能性があります。

 (kazu)


 どうもありがとうございました。夜分遅く・・・。

 おかげさまで、スラスラと頭が整理できました。

 (エータロー)

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.