プロが教えるわが家の防犯対策術!

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

A 回答 (3件)

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


ですので以下は省略されている部分の推測です。

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

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

上記の内容が参考になればと思います。
    • good
    • 2
この回答へのお礼

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

お礼日時:2003/08/02 09:51

 質問にお書きになったソースからすると関係なさそう


ですが、Exit Subの書き忘れのせいでエラーでは
ないのにエラー処理部分にまわってしまうことが
ありえます。一応お確かめになると良いかと思います。
    • good
    • 3
この回答へのお礼

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

お礼日時:2003/08/02 09:45

通常ないとおもうんですが、未定義の場合、大きな数字になりますよね。


 Erlで、エラーの起こった行を見れませんか?

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

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

 頻繁に出るようで有れば、デバックモードで追跡するしかないですね...
    • good
    • 0
この回答へのお礼

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

お礼日時:2003/07/29 16:04

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A