プロシージャ名を取得するには

解決


ジム  2004-10-15 18:16:40  No: 117007  IP: [192.*.*.*]

現在実行中のプロシージャ名を取得するにはどうしたらいいのでしょうか?
エラーログに問題のあったプロシージャ名があればトラブルシュートに非常に有効
なんですが、どなたか知っていたら教えて下さい。ちなみにVB6を使用しております。

編集 削除
ささ  2004-10-15 18:20:17  No: 117008  IP: [192.*.*.*]

何も考えずに、コーディングすのるのあれば
グローバル変数をひとつ用意して、頭でプロシージャ名を格納してください。

編集 削除
特攻隊長まるるう  2004-10-15 19:10:17  No: 117009  IP: [192.*.*.*]

ちなみに過去ログ検索『プロシージャ名』
http://madia.world.coocan.jp/cgi-bin/VBBBS2/wwwlng.cgi?print+200405/04050057.txt

編集 削除
いな  2004-10-15 19:49:20  No: 117010  IP: [192.*.*.*]

自分の場合はエラーログの時

Sub Form_load()

On Error GoTo hogehoge_Err

Exit Sub
hogehoge_Err:
 Debug.Print "Form_Load" & Err.Number
End Sub

とやっちゃうな、

編集 削除
いな  2004-10-15 19:57:35  No: 117011  IP: [192.*.*.*]

途中で送信を推してしまいました。

カレントプロシージャ名を取得したい
では何の目的か、分からないので
あんな力技の回答ぐらいしか出来ませんが

『エラーログ』で何処のプロシージャで落ちているか知りたい…。
だと回答の仕方も随分勝手がちがうものです。

編集 削除
ねろ  2004-10-16 08:23:07  No: 117012  IP: [192.*.*.*]

>グローバル変数をひとつ用意して、頭でプロシージャ名を格納してください。
ローカル変数の方がいいんじゃないかな。

プロジェクトの中の「.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
も挿入しちゃうとか。

編集 削除
葉月  2004-10-18 13:00:28  No: 117013  IP: [192.*.*.*]

自分も、さささんのようにグローバルに入れる形式取りました
入れ子状態で、どの順でプロシージャを読んだのかも出力するため

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なんかじゃないですけどね・・・
あと、このプロシージャの親プロシージャ以上でエラートラップしたいときにも使えると思いますし

編集 削除
ジム  2004-10-25 17:01:14  No: 117014  IP: [192.*.*.*]

どうも自動的に取得する方法はなさそうですね。外部変数を使ってプロシージャ名を格納するようにします。回答ありがとうございました。

編集 削除