• ベストアンサー

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」  以外に使用する方法があるのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
回答No.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文は見た目似ていますがまったく別の命令です。

mas_sama
質問者

お礼

丁寧な解説ありがとうございました。 「On Goto 文」というのがあるんですね(^^; 非常に参考になりました。 問題は何とか解決できそうです。

その他の回答 (1)

  • maruru01
  • ベストアンサー率51% (1179/2272)
回答No.1

こんにちは。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とタイプミスしているのかもしれません。

mas_sama
質問者

お礼

ご回答ありがとうございます。 ご指摘の通りタイプミスと判断しています。 問題も解決できそうです(^^)

関連するQ&A