現在実行中のプロシージャ名を取得するにはどうしたらいいのでしょうか?
エラーログに問題のあったプロシージャ名があればトラブルシュートに非常に有効
なんですが、どなたか知っていたら教えて下さい。ちなみにVB6を使用しております。
何も考えずに、コーディングすのるのあれば
グローバル変数をひとつ用意して、頭でプロシージャ名を格納してください。
ちなみに過去ログ検索『プロシージャ名』
http://madia.world.coocan.jp/cgi-bin/VBBBS2/wwwlng.cgi?print+200405/04050057.txt
自分の場合はエラーログの時
Sub Form_load()
On Error GoTo hogehoge_Err
Exit Sub
hogehoge_Err:
Debug.Print "Form_Load" & Err.Number
End Sub
とやっちゃうな、
途中で送信を推してしまいました。
カレントプロシージャ名を取得したい
では何の目的か、分からないので
あんな力技の回答ぐらいしか出来ませんが
『エラーログ』で何処のプロシージャで落ちているか知りたい…。
だと回答の仕方も随分勝手がちがうものです。
>グローバル変数をひとつ用意して、頭でプロシージャ名を格納してください。
ローカル変数の方がいいんじゃないかな。
プロジェクトの中の「.Bas」や「.frm」の拡張子の付いたファイルを
読み込み、「Private Sub」や「Public Sub」のキーワードを探して
その次の行に
Dim CurrentSubPos as String
CurrentSubPos = "Private Sub Form_Load"
なんてのを自動挿入する簡単なプログラムを作ると面白いかも。
「 _」の改行と2重挿入だけ注意すれば、簡単に作れると思うけど。
ついでに
On Error GoTo hogehoge_Err や
hogehoge_Err:
Debug.Print CurrentSubPos & ":" & Err.Number
も挿入しちゃうとか。
自分も、さささんのようにグローバルに入れる形式取りました
入れ子状態で、どの順でプロシージャを読んだのかも出力するため
Public A As String
Private Sub ●●●●プロシージャ()
Dim B As String
On Error Goto ErrHandler
B = A
A = A & ">●●●●プロシージャ()"
〜 処 理 〜
A = B
Exit Sub
ErrHandler:
MsgBox(A)
End Sub
上の形を雛型として作成しておき
使うたびに">●●●●プロシージャ()"の部分を書き換えてます
ここからさらにプロシージャが呼ばれれば、プロシージャ名の連結でトレースも楽になるかと・・・
もちろん変数名はAやBなんかじゃないですけどね・・・
あと、このプロシージャの親プロシージャ以上でエラートラップしたいときにも使えると思いますし
どうも自動的に取得する方法はなさそうですね。外部変数を使ってプロシージャ名を格納するようにします。回答ありがとうございました。
ツイート | ![]() |