• ベストアンサー

On ErrorでエラーNoが0

On ErrorでエラーをトラップしてエラーNOとエラー内容をダイアログに表示させています。 Private Sub pv_sample() Dim errno as Long On Error GoTo ERR_END ' 処理内容略 Exit Sub ERR_END: errno = Err.Number MsgBox "システムエラー エラーNO(" & errno & ") 内容(" & Err.Description & ")" End Sub エラーが発生した場合はErr.Numberには0以外がセットされるはずですが 「システムエラー エラーNO(0) 内容()」 というメッセージが表示されることがあります。 On Eroorで飛んできたときにエラーNoが0になってしまうことはありえるのでしょうか。

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

  • ベストアンサー
  • heroyon
  • ベストアンサー率100% (2/2)
回答No.3

プロシージャ内のエラー時にエラートラップ(On Error goto)によってでERR_END:に飛んでいれば、Err.Number には必ずエラー番号が入ってくるはずです。 ですので以下は省略されている部分の推測です。 このプロシージャから呼び出しているプロシージャ(以下サブプロ)があるとして、そのサブプロでエラーが発生した場合、 (1)そのサブプロでエラートラップがされていなければ、このプロシージャのエラートラップ(On Error goto)に引っかかり、ERR_END:に飛んできます。その際はErr.Numberにはエラー番号が格納されています。 (2)そのサブプロでエラートラップしている場合、エラー処理後戻ってくるので、このプロシージャのエラートラップには引っかかりません。その際はErr.Numberにはエラー番号が格納されていません(0)。 (2)の場合で、ERR_END:に飛ぶような記述をしていれば、今回のような現象が起きます。確認してみてください。 上記の内容が参考になればと思います。

SUU74
質問者

お礼

回答ありがとうございます。 問題のプロシージャからは他のプロシージャは 呼んでいませんでした。 また、他にgoto ERR_ENDもないのでOn Error goto以外でERR_END:に飛ぶことはないと思います。

その他の回答 (2)

  • Tattoko
  • ベストアンサー率17% (3/17)
回答No.2

 質問にお書きになったソースからすると関係なさそう ですが、Exit Subの書き忘れのせいでエラーでは ないのにエラー処理部分にまわってしまうことが ありえます。一応お確かめになると良いかと思います。

SUU74
質問者

お礼

回答ありがとうございます。 Exit Sub書き忘れはありませんでした。

  • ginyou
  • ベストアンサー率32% (138/431)
回答No.1

通常ないとおもうんですが、未定義の場合、大きな数字になりますよね。  Erlで、エラーの起こった行を見れませんか?  たぶん、サブルーチンとかでエラーになった場合、処理方法によっては、エラーNoは確定出来ないかも?  なんか、以前 0 になった記憶はあるんですが、原因が思い出せません。  頻繁に出るようで有れば、デバックモードで追跡するしかないですね...

SUU74
質問者

お礼

回答ありがとうございます。 書き忘れましたがVB6なのでErlは使えませんでした。 エラー箇所が特定できればよいのですが開発環境では 発生しないため難しい状態です。

関連するQ&A