- ベストアンサー
Onってなんでしょうか?
私は現在、VB6を使用してプログラム開発を行っています。 「On Error」ステートメントに関して質問させていただきます。 私の管理下のソースに、 (1)「On Error Goto [行ラベル]」 (2)「On Err Goto [行ラベル]」 の2種類のステップがあり、 (2)に関しての動作が不明で困っています。 (要は「On [Object] Goto [行ラベル]」と記述した場合に、 どのように解釈されるのか分らないのですが・・・ (1)、(2)共にコンパイルは通りますが(2)の場合はエラーハンドリングはできません。) <質問> (1)「On Err Goto [行ラベル]」 と記述した場合、 どのような条件でGotoが実行されるのでしょうか? (Errはエラーオブジェクトです) (2)「On」は ・「On Error Goto [行ラベル]」 ・「On Error Resume Next」 ・「On Error Goto 0」 以外に使用する方法があるのでしょうか?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
(1) On Err Goto [行ラベル]はただのOn Goto文となると思います。 On Goto文ではOnの次には0から255までの値をとる式が来ます。 その式の値により、行き先の行が変わります。 もし、On A GOTO Label1, Label2とあった場合、Aの値が1のときはLabel1、2のときはLabel2へ、0や行ラベルより多い数の場合は何もせず次の行へ処理を移します。 ご質問ではエラーオブジェクトの内容を評価して分岐することになりますのでエラー番号が1~255のときのみ何らかの動作をさせることが出来ます。 (2)ですがOn Error文はエラー処理ルーチンに分岐させる命令です。 エラーが起きたときGoto以下の行へ実行を移します。 On Error文はOn Goto文と違い、Goto以下には一つの行しか指定できません。 On Error文ではOn Error Goto 行、 On Error Resume Next、 On Error Goto 0しか書くことが出来ません。 ただ、On Error Goto 0だけは特殊で、設定されたOn Error文を解除するためだけに使われます。 On Goto文と On Error Goto文は見た目似ていますがまったく別の命令です。
その他の回答 (1)
- maruru01
- ベストアンサー率51% (1179/2272)
こんにちは。maruru01です。 「On」には、 ・On ... GoTo ... ・On ... Sub ... というステートメントがあります。 使い方は、 On num GoTo Line1, Line2, (以降カンマで繋げる) の場合、 numが1ならLine1へ、2ならLine2へ・・・ という風に各行へジャンプします。(Line1、Line2・・・は行ラベル) この場合numは数値として認識出来ないといけません。 従って、(2)の例ではErrオブジェクトの既定値はNumberプロパティなので、エラー番号で分岐するということではないのでしょうか。 ただし、例えばエラー番号12とかの場合、行ラベルを12個以上書かなくてはならないです。 ちなみに、Err(Err.Number)が0~255の範囲ならば、行ラベルの数が足りなくてもエラーにはなりません。 なお、GoToの後ろの行ラベルがカンマ区切りで複数書いていない場合は、ErrorをErrとタイプミスしているのかもしれません。
お礼
ご回答ありがとうございます。 ご指摘の通りタイプミスと判断しています。 問題も解決できそうです(^^)
お礼
丁寧な解説ありがとうございました。 「On Goto 文」というのがあるんですね(^^; 非常に参考になりました。 問題は何とか解決できそうです。