MS Access VBAで実行パスをトレースするアプリケーションで作業しています。しかし、私は問題に遭遇しました。 VBAでは、OnClickやその他のイベントを制御するためにハンドラを動的に割り当てることができますが、これらのコントロールからイベントを読み取る方法はありません。例:VBAでOnClickイベントのイベントハンドラをプログラムで特定する
With Forms("Order Entry").Controls("OK")
If .OnClick = "" Then
.OnClick = "fnProcessOrder"
End If
End With
これは、機能「fnProcessOrder」を「OK」ボタンに動的に割り当てます。あなたがそのボタンの値を取得しようとする場合は、あなたはこれを取得:
With Forms("Order Entry").Controls("OK")
Debug.Print "My Handler -->" + .OnClick
EndWith
結果で:
--> [Event Procedure]
、それ以上の詳細。これは、Microsoftがここに記載した動作であると思われます。 https://msdn.microsoft.com/en-us/vba/access-vba/articles/commandbutton-onclick-property-access
しかし、それ以上に進むにはどうしたらいいのでしょうか。
私はその情報がMSysObjectsテーブルとMSysQueriesテーブルにあると思っていましたが、そこには表示されません。私は、データベースDocumenterを使用して私のテストデータベースを抽出しようとしましたが、私は生成されたドキュメントからもその価値を得ています。
コントロールに割り当てられたVBA関数を見つける方法はありますか?
いずれのツールにも制限があります。'' fnProcessOrder ''文字列リテラルが部分から連結される場合を考えてみましょう。 '.OnClick =" fnProcess "&itemType'です。 FWIW私は実行パスに関するあなたの仕事について、そしてあなたがそれについてどのように動いているかについて非常に興味があります。 「Rubberduck」(http://www.github.com/rubberduck-vba/Rubberduck)はここであなたの専門知識を利用することができます。今後の大きな課題の1つは、「コードパス解析」コード検査を20実装しようとしている。シンボルテーブルと抽象構文ツリーなしでこれをやっていますか? –
さて、私は、pyparsing、lex、または手作業で何らかの基本的な処理を行う予定です。だから、間違いなくシンボルツリーになるでしょう、私はすでにそれを構築し始めました。 .OnClickプロパティを読み取れないと、他のすべてが保持されます。私は、バイナリを解析するために何かを書く必要はないと期待しています... –
実際に割り当てられた値は、(例えば関数や内部ハンドルなどのメモリポインタのように) 。 OKボタンの隣に非表示のテキストコントロールを追加し、OnClickを動的に変更したときはいつでもそれを更新します。または、固定のOnClick関数を使用して、そのテキストフィールドを読み取り、それに応じてリダイレクトします。 – SunKnight0