• ベストアンサー

On Error GoToで飛んだ元の位置が知りたい

タイトル通りですが、VB6でOn Error GoTo XXXとしておくと、エラー発生時、XXXのラベルから実行されます。この時、どこから、このエラー処理(XXX)に飛んできたかを知ることは出来ないのでしょうか。要はエラーの発生した場所(ステートメント)を知りたいのですが、どのようにすれば、知ることが出来るでしょうか。現在は、怪しいところに目つけて、そこから1ステップずつ実行しているのですが、効率が悪いので、簡単に知る方法があればと思い質問しました。

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

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

私がよくやるのは、   On Error GoTo Err_XXX   ...   Exit Sub Err_XXX:   Stop   Resume   ...  '正規のエラー処理 End Sub のように Resume で戻る方法です。 もちろん、原因がわかって対処を施したあとで Stop、Resume は削除します。

tatsu99
質問者

お礼

回答ありがとうございました。この方法だと、確実にエラーの発生箇所が特定できますね。今後は、この方法を試してみます。

その他の回答 (1)

回答No.1

確かに、On Error Gotoの場合、飛んできた元は分からないですよね。 その為に、はまることもしばしばですが・・・ そこで、取るべき方法は、”自分でステータス値”を設定するしかないと思います。 つまり、プログラムの関数/サブルーチンの中に、ステータス値を格納する変数を持ち、一連の処理が進む度に、自分でステータス値をセットしていく。 そして、エラー発生時にそのステータス値を表示するなりすれば、一発で分かると思いますよ。

tatsu99
質問者

お礼

早速の回答ありがとうございました。やはり、どこから飛んできたかは、判らないですか。今後は、教えていただいた方法を参考にさせていただきます。ありがとうございました。

関連するQ&A

  • Onってなんでしょうか?

    私は現在、VB6を使用してプログラム開発を行っています。 「On Error」ステートメントに関して質問させていただきます。 私の管理下のソースに、   (1)「On Error Goto [行ラベル]」   (2)「On Err Goto [行ラベル]」 の2種類のステップがあり、 (2)に関しての動作が不明で困っています。 (要は「On [Object] Goto [行ラベル]」と記述した場合に、  どのように解釈されるのか分らないのですが・・・  (1)、(2)共にコンパイルは通りますが(2)の場合はエラーハンドリングはできません。) <質問> (1)「On Err Goto [行ラベル]」 と記述した場合、  どのような条件でGotoが実行されるのでしょうか?  (Errはエラーオブジェクトです) (2)「On」は   ・「On Error Goto [行ラベル]」   ・「On Error Resume Next」   ・「On Error Goto 0」  以外に使用する方法があるのでしょうか?

  • エクセルVBA 「On Error GoTo 0」について

    「On Error GoTo 」ステートメントの意味は、だいたい理解しています。 「On Error GoTo 0」 ステートメントについて、ご教授お願いします。 参考書には「エラーのトラップ処理を無効にする」と載っていましたが、よくわかりません。 具体的にどのような使い方をするのか、簡単なコードで説明していただければ幸いです。 よろしくお願いします。

  • On Error GoTo でエラーが発生する

    Sub Macro1() On Error GoTo ErrorTrap1     '-エラーの発生するコード 1 ErrorTrap1: On Error GoTo 0    Do    On Error GoTo ErrorTrap2       '-エラーの発生するコード 2    On Error GoTo 0    Loop ErrorTrap2: End Sub しかし、以下のようにSubで二つに分けるとエラーは出ません。 Sub Macro1() On Error GoTo ErrorTrap1     '-エラーの発生するコード 1 ErrorTrap1: On Error GoTo 0 Call Macro2 End Sub Sub Macro2()     Do      On Error GoTo ErrorTrap2       '-エラーの発生するコード 2     On Error GoTo 0     Loop   ErrorTrap2: End Sub 「On Error GoTo 0」がうまく解除できていないのかと思い、いろいろ試してみました。 しかし、どういった理由かはわかりませんでした。 「On Error GoTo」は、Subでは、ひとつしか使えないのでしょうか。

  • VBAでon error goto文がきかない

    エラーが発生しているにもかかわらずon error gotoが実行されません。 ファイルの存在チェックで存在したときは消すようにプログラムしたはずなのに。同僚いわく「何かOSのファイルが壊れているのでは?」とのこと。OSの再インストールでもすればいいのでしょうか?できれば参照設定かなんかでファイルをアサインしてon error gotoが実行されるようにしたいのですが・・・ムリですか?

  • [Excel2003] On Error GoTo について教えてください。

    エラー処理について教えてください。 以下の様なマクロで、インプットボックスに 数字以外を入力した場合のエラー処理ですが、 次のような手順で進めると 「型が一致しません」とエラー表示されてしまいます。 どこがいけないのでしょうか?   【手順】   ・マクロ実行   ・インプットボックスへ数字以外の文字を入力   ・「OK」クリック   ・再びインプットボックス出現   ・もう一度数字以外の文字を入力   ・「OK」クリック←ここでエラー表示! Sub TEST() Dim Tuki As Integer On Error GoTo INPT INPT: Tuki = InputBox("何月分ですか?" & vbCrLf & _ "数字を入力してください。", "集計月入力", 1) If Tuki = 0 Or Tuki > 12 Then MsgBox "1から12の数字を入力してください。" GoTo INPT End If On Error GoTo 0 End Sub

  • VBでのエラー処理(On Error)

    VBで以下のようなプログラムを書いています。 sub On Error goto Err 処理1 Err: 処理2 End sub 処理1でエラーが発生した場合、Err:の処理に入ってくるのですが、もしErr:の中の処理2でもエラーが発生した場合、どうすればよいのでしょうか? Err:の中でもエラー処理ができるのでしょうか、それともロジックで回避しなければならないのでしょうか? ご存知の方がいらっしゃいましたら宜しくお願いします。

  • on error 処理に関して

    on error goto での処理ルーチン内で、 さらに on error goto を出すことは可能でしょうか。 それとも、一度on errorを設定すると、エラーが発生した後では変更は不可なのでしょうか。 やりたいことは、 1回目と、2回目、3回目以降でやることとを変えたいのです。 例えば、メッセージを変えるとか。 この場合、 エラー処理の中で、何回目かを聞くことで、メッセージを変えることは出来ると思うのですが、 それはやらず、 他にも色々やることが多いので、別処理として飛びたいのです。 以下のようなイメージです。 err1: on error goto err2 resume next err2: on error goto err3 resume next err3: resume next 宜しくお願いします。

  • エラー処理の中で起こるエラーを無視したい

    On Error Goto ラベル ラベル内でエラー処理をしています。 エラー処理内でエラーが起こってしまう場合は無視して続けたいのですが、 ラベルの中に、 On Error Resume Next と書いてもダメでした。 On Error Goto 0にしてもダメでした。 どのようにすれば可能ですか?

  • GOTO命令

    現在GOTO命令を用いて、処理をしようとしていますが、一つの関数内でGOTO命令はOKなのですが、GOTO命令先の関数が違う場合はGOTOは使えないのでしょうか? つまり Private Sub CommandButton1_Click()   処理 back: end Sub Private Sub CommandButton2_Click()   処理 goto back end Sub 上記のようにGOTOのラベルが他の関数内にある時はつかえないのでしょうか?何か方法ないでしょうか?

  • VBの接続エラーについて

    VB6.0について質問です。 VBで作成したツールで起動時にファイルサーバのネットワークドライブに接続して終了時に切断の処理を実行しているのですが。 異常終了した場合にネットワークドライブが接続されたままになってしまい端末を再起動したさいにパスワードを要求されるという不具合が生じてしまいました。 これに対応するにはどういった処理が考えられますでしょうか? 異常終了のときに走るイベントみたいなものは存在したらいいんですけど。。。 今考えているのはフォーム全てにOn Error GoToを追加して対応しようと思っているのですがほかにもっと効率の良い方法はありますか?

専門家に質問してみよう