• 締切済み

【VBA-AC2000】カレントプロシージャ名を取得したい

AC2000+MSSQL2000環境でVBAを使ってアプリケーション開発しています。 エラー時にユーザー定義関数を使ってカレントフォーム名やカレントコントロール名をメールで送るようにしています。 さらに追加して、どのプロシージャでえらーが起こっているのか知りたく、、コードの中でカレントプロシージャ名を取得する方法ってないでしょうか?

みんなの回答

  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.2

> アクセス自体は絶対にどこかにこの情報(実行中のプロシージャー名) > を持っていると思うのですが それは管理してますよね。しかし、詳しいわけではありませんが、恐らく それはプロシージャのメモリ上の位置でだと思います。String 型のプロ シージャ名で管理してるわけではないでしょう。  # VBA は純粋なインタプリタ言語ではありません また、.NET だと GetCurrentMethod でプロシージャ名を取得できますが、 VB6/VBA にはこれに該当するものがありません。 つまり、実行のたび変化するであろうメモリ上の位置しか取得できないと すれば、それを人間にとって意味のある情報(文字列のプロシージャ名) にするのは非常に困難だと考えます。 したがって、取り得る方法としては #1 に示したように、全てのプロシージャ でエラーハンドリングを行い、その中でプロシージャ名をログ出力する しかないかと思います。 もちろん、On Error でトラップできないエラーもありますけどね。

t2hayashi
質問者

お礼

やはりそうですか・・・・・ なんだかニーズがありそうな気がするのですが、(たとえばプロシージャの実行ログテーブルを作りたい!とか) 現状では無理なんですね・・・・ お手数お掛けしました。ありがとうございました。

  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.1

エラーログをとるコードを書けば良いだけです。 ’// コード例 Sub ProcedureA()   On Error Goto Err_   ’// 処理 Bye_:   Exit Sub Err_:   ' // エラーを記録する   Call ErrLoging(Err.Number,"ProcedureA")   Resume Bye_   ' 復帰させるならエラーをクリアしてから Resume End Sub Public Sub ErrLoging(ByVal ErrNum as Long, _            ByVal ProcName as String _ )   ' // ここに次の内容の処理を書く   ' // 日時・エラー番号・プロシージャ名をテキスト出力する   ' // また、重要なローカル変数の内容も引数で渡すなどして   ’// 記録するのもいい。もちろんグローバル変数も。 End Sub > カレントフォーム名やカレントコントロール名を 使えるか調べてませんが、確か ActiveControl、ActiveForm などの プロパティーがあったと思います。

t2hayashi
質問者

お礼

回答ありがとうございました。 一番困っているのは >Call ErrLoging(Err.Number,"ProcedureA") このエラー関数(ユーザー定義)を汎用的にしたいので "ProcedureA" という実行中のプロシージャ名を呼び出す環境変数的なものがないかと思いまして・・ イメージ的には Call ErrLoging(Err.Number,Currentdb.ActiveProcedure.Name) みたいな感じです・・・・ アクセス自体は絶対にどこかにこの情報(実行中のプロシージャー名) を持っていると思うのですが、それを呼び出す方法が見つからず・・・

関連するQ&A