0

この質問は、VBIDE によって発生したいくつかのイベントを参照しています。Access オブジェクト (フォーム、クエリ定義、モジュール、クラス モジュールなど) が保存されるたびに発生する、フックできるイベントを探しています。

そのようなイベントが利用できない場合は、回避策を探しています。プロジェクト全体の保存イベントまたはコード モジュールの変更イベントは、許容される代替手段です。おそらく、「msys」システム テーブルの 1 つが更新されたときに、理想的にはどの行が更新されたかを通知する独創的な方法があります。

最悪の場合、CurrentDb.QueryDefs .LastUpdatedor CurrentProject.AllForms//プロパティを反復.AllModules処理し.AllReports .DateModifiedて一定間隔でポーリングできるように見えますが、可能であればそれを避けたいと考えています。

4

1 に答える 1

0

キャッチできるイベントはありませんが、おそらくデータベース オブジェクトをポーリングするよりも優れた解決策があります。

データベース ウィンドウ (すべてのテーブル、クエリ、およびその他のオブジェクトを含む) は、ユーザー インターフェイスで特定のことが発生すると、Windows メッセージを受け取ります。Spy++ で簡単に調べると、オブジェクトが保存されたときに、データベース ウィンドウが WM_ENABLE メッセージを受信して​​いるように見えます。Win32 を使用してそのメッセージをトラップできる場合は、信頼できる「イベント」の始まりがある可能性があります。

VBA ユーザー フォームは Access プロジェクトで使用できますが、データベース ウィンドウには表示されないため、問題になる可能性があることに注意してください。

また、データベース オブジェクトをプログラムで変更/追加/削除しても、データベース ウィンドウの自動更新またはメッセージがトリガーされない場合があります。

于 2016-09-10T09:33:02.967 に答える