dポイントプレゼントキャンペーン実施中!

AC2000+MSSQL2000環境でVBAを使ってアプリケーション開発しています。

エラー時にユーザー定義関数を使ってカレントフォーム名やカレントコントロール名をメールで送るようにしています。

さらに追加して、どのプロシージャでえらーが起こっているのか知りたく、、コードの中でカレントプロシージャ名を取得する方法ってないでしょうか?

A 回答 (2件)

> アクセス自体は絶対にどこかにこの情報(実行中のプロシージャー名)


> を持っていると思うのですが

それは管理してますよね。しかし、詳しいわけではありませんが、恐らく
それはプロシージャのメモリ上の位置でだと思います。String 型のプロ
シージャ名で管理してるわけではないでしょう。

 # VBA は純粋なインタプリタ言語ではありません

また、.NET だと GetCurrentMethod でプロシージャ名を取得できますが、
VB6/VBA にはこれに該当するものがありません。

つまり、実行のたび変化するであろうメモリ上の位置しか取得できないと
すれば、それを人間にとって意味のある情報(文字列のプロシージャ名)
にするのは非常に困難だと考えます。

したがって、取り得る方法としては #1 に示したように、全てのプロシージャ
でエラーハンドリングを行い、その中でプロシージャ名をログ出力する
しかないかと思います。

もちろん、On Error でトラップできないエラーもありますけどね。
    • good
    • 0
この回答へのお礼

やはりそうですか・・・・・

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

お手数お掛けしました。ありがとうございました。

お礼日時:2007/08/30 17:45

エラーログをとるコードを書けば良いだけです。



’// コード例
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 などの
プロパティーがあったと思います。
    • good
    • 0
この回答へのお礼

回答ありがとうございました。
一番困っているのは

>Call ErrLoging(Err.Number,"ProcedureA")

このエラー関数(ユーザー定義)を汎用的にしたいので
"ProcedureA" という実行中のプロシージャ名を呼び出す環境変数的なものがないかと思いまして・・

イメージ的には
Call ErrLoging(Err.Number,Currentdb.ActiveProcedure.Name)

みたいな感じです・・・・

アクセス自体は絶対にどこかにこの情報(実行中のプロシージャー名)
を持っていると思うのですが、それを呼び出す方法が見つからず・・・

お礼日時:2007/08/30 16:38

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A