• ベストアンサー
  • すぐに回答を!

On ErrorでエラーNoが0

  • 質問No.613526
  • 閲覧数269
  • ありがとう数3
  • 気になる数0
  • 回答数3
  • コメント数0

お礼率 100% (10/10)

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になってしまうことはありえるのでしょうか。

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

  • 回答No.3
  • ベストアンサー

ベストアンサー率 100% (2/2)

プロシージャ内のエラー時にエラートラップ(On Error goto)によってでERR_END:に飛んでいれば、Err.Number には必ずエラー番号が入ってくるはずです。
ですので以下は省略されている部分の推測です。

このプロシージャから呼び出しているプロシージャ(以下サブプロ)があるとして、そのサブプロでエラーが発生した場合、
(1)そのサブプロでエラートラップがされていなければ、このプロシージャのエラートラップ(On Error goto)に引っかかり、ERR_END:に飛んできます。その際はErr.Numberにはエラー番号が格納されています。
(2)そのサブプロでエラートラップしている場合、エラー処理後戻ってくるので、このプロシージャのエラートラップには引っかかりません。その際はErr.Numberにはエラー番号が格納されていません(0)。

(2)の場合で、ERR_END:に飛ぶような記述をしていれば、今回のような現象が起きます。確認してみてください。

上記の内容が参考になればと思います。
お礼コメント
SUU74

お礼率 100% (10/10)

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

その他の回答 (全2件)

  • 回答No.2

ベストアンサー率 17% (3/17)

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

お礼率 100% (10/10)

回答ありがとうございます。
Exit Sub書き忘れはありませんでした。
投稿日時:2003/08/02 09:45
  • 回答No.1

ベストアンサー率 32% (138/431)

通常ないとおもうんですが、未定義の場合、大きな数字になりますよね。
 Erlで、エラーの起こった行を見れませんか?

 たぶん、サブルーチンとかでエラーになった場合、処理方法によっては、エラーNoは確定出来ないかも?

 なんか、以前 0 になった記憶はあるんですが、原因が思い出せません。

 頻繁に出るようで有れば、デバックモードで追跡するしかないですね...
お礼コメント
SUU74

お礼率 100% (10/10)

回答ありがとうございます。
書き忘れましたがVB6なのでErlは使えませんでした。
エラー箇所が特定できればよいのですが開発環境では
発生しないため難しい状態です。
投稿日時:2003/07/29 16:04
結果を報告する
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。
AIエージェント「あい」

こんにちは。AIエージェントの「あい」です。
あなたの悩みに、OKWAVE 3,600万件のQ&Aを分析して最適な回答をご提案します。

関連するQ&A

その他の関連するQ&Aをキーワードで探す

ピックアップ

ページ先頭へ