- ベストアンサー
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になってしまうことはありえるのでしょうか。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
プロシージャ内のエラー時にエラートラップ(On Error goto)によってでERR_END:に飛んでいれば、Err.Number には必ずエラー番号が入ってくるはずです。 ですので以下は省略されている部分の推測です。 このプロシージャから呼び出しているプロシージャ(以下サブプロ)があるとして、そのサブプロでエラーが発生した場合、 (1)そのサブプロでエラートラップがされていなければ、このプロシージャのエラートラップ(On Error goto)に引っかかり、ERR_END:に飛んできます。その際はErr.Numberにはエラー番号が格納されています。 (2)そのサブプロでエラートラップしている場合、エラー処理後戻ってくるので、このプロシージャのエラートラップには引っかかりません。その際はErr.Numberにはエラー番号が格納されていません(0)。 (2)の場合で、ERR_END:に飛ぶような記述をしていれば、今回のような現象が起きます。確認してみてください。 上記の内容が参考になればと思います。
その他の回答 (2)
- Tattoko
- ベストアンサー率17% (3/17)
質問にお書きになったソースからすると関係なさそう ですが、Exit Subの書き忘れのせいでエラーでは ないのにエラー処理部分にまわってしまうことが ありえます。一応お確かめになると良いかと思います。
お礼
回答ありがとうございます。 Exit Sub書き忘れはありませんでした。
- ginyou
- ベストアンサー率32% (138/431)
通常ないとおもうんですが、未定義の場合、大きな数字になりますよね。 Erlで、エラーの起こった行を見れませんか? たぶん、サブルーチンとかでエラーになった場合、処理方法によっては、エラーNoは確定出来ないかも? なんか、以前 0 になった記憶はあるんですが、原因が思い出せません。 頻繁に出るようで有れば、デバックモードで追跡するしかないですね...
お礼
回答ありがとうございます。 書き忘れましたがVB6なのでErlは使えませんでした。 エラー箇所が特定できればよいのですが開発環境では 発生しないため難しい状態です。
お礼
回答ありがとうございます。 問題のプロシージャからは他のプロシージャは 呼んでいませんでした。 また、他にgoto ERR_ENDもないのでOn Error goto以外でERR_END:に飛ぶことはないと思います。