- 締切済み
【VBA-AC2000】カレントプロシージャ名を取得したい
AC2000+MSSQL2000環境でVBAを使ってアプリケーション開発しています。 エラー時にユーザー定義関数を使ってカレントフォーム名やカレントコントロール名をメールで送るようにしています。 さらに追加して、どのプロシージャでえらーが起こっているのか知りたく、、コードの中でカレントプロシージャ名を取得する方法ってないでしょうか?
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- KenKen_SP
- ベストアンサー率62% (785/1258)
> アクセス自体は絶対にどこかにこの情報(実行中のプロシージャー名) > を持っていると思うのですが それは管理してますよね。しかし、詳しいわけではありませんが、恐らく それはプロシージャのメモリ上の位置でだと思います。String 型のプロ シージャ名で管理してるわけではないでしょう。 # VBA は純粋なインタプリタ言語ではありません また、.NET だと GetCurrentMethod でプロシージャ名を取得できますが、 VB6/VBA にはこれに該当するものがありません。 つまり、実行のたび変化するであろうメモリ上の位置しか取得できないと すれば、それを人間にとって意味のある情報(文字列のプロシージャ名) にするのは非常に困難だと考えます。 したがって、取り得る方法としては #1 に示したように、全てのプロシージャ でエラーハンドリングを行い、その中でプロシージャ名をログ出力する しかないかと思います。 もちろん、On Error でトラップできないエラーもありますけどね。
- KenKen_SP
- ベストアンサー率62% (785/1258)
エラーログをとるコードを書けば良いだけです。 ’// コード例 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 などの プロパティーがあったと思います。
お礼
回答ありがとうございました。 一番困っているのは >Call ErrLoging(Err.Number,"ProcedureA") このエラー関数(ユーザー定義)を汎用的にしたいので "ProcedureA" という実行中のプロシージャ名を呼び出す環境変数的なものがないかと思いまして・・ イメージ的には Call ErrLoging(Err.Number,Currentdb.ActiveProcedure.Name) みたいな感じです・・・・ アクセス自体は絶対にどこかにこの情報(実行中のプロシージャー名) を持っていると思うのですが、それを呼び出す方法が見つからず・・・
お礼
やはりそうですか・・・・・ なんだかニーズがありそうな気がするのですが、(たとえばプロシージャの実行ログテーブルを作りたい!とか) 現状では無理なんですね・・・・ お手数お掛けしました。ありがとうございました。