みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

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

投稿日時 - 2003-07-28 17:49:10

QNo.613526

すぐに回答ほしいです

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

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

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

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

上記の内容が参考になればと思います。

投稿日時 - 2003-07-30 15:56:30

お礼

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

投稿日時 - 2003-08-02 09:51:30

ANo.3

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.2

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

投稿日時 - 2003-07-30 02:40:34

お礼

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

投稿日時 - 2003-08-02 09:45:32

ANo.1

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

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

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

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

投稿日時 - 2003-07-28 18:59:38

お礼

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

投稿日時 - 2003-07-29 16:04:55

あなたにオススメの質問