2017-08-11 3 views
1

私は約400のFormsを持つ約20のMS-Accessデータベースを持っていて、どのフォームがロードされてもアクションを実行したいと思っています。 データベースやアプリケーションレベルのイベントが必要になります。これは、開いている/ロードされている任意のフォームでトリガーされます。次に、それぞれのデータベースにコードを1回追加するだけでよいのですが、それぞれの400のフォームにコードを追加する必要はありません。 そして:それはVBA(Access> = 2010)になければなりません! 私の質問:これも可能ですか?もしそうなら、誰かがヒントを持っていますか? ありがとう、 PeteMSアクセスイベントロードフォーム

+0

各フォームはどのように読み込まれますか?いくつかのユーザー操作に基づいて実行時に手動でフォームを読み込んでいますか?または、Access内の組み込みナビゲーションを使用して各フォームを読み込むユーザーですか? –

+0

フォームはさまざまなユーザーのやりとりによって読み込まれています(私は自分でパッケージを書いていません)。フォームがオープン/ロードされるたびに特定の機能を追加するだけで済みます。 "Form_Load(pForm As Form)"のようなDBイベントは完璧でしたが、存在しないようです。とにかくありがとう! – McWilliamsPete

答えて

2

これについては、複数の方法があります。

私は多分やるだろうことは以下の通りです:

  1. データベースがタイマーで(AutoExecマクロを使用して)を開くたび開く隠しフォームを作成します。
  2. 隠しフォームを読み込むときに、データベースで使用可能なすべてのフォームのコレクション/マルチレベル配列を初期化し、ステータスをclosedに設定します(おそらく多レベル配列またはコレクション内のコレクションを使用するとフォーム名+ブール値のオープンまたはクローズを格納する)。
  3. 定期的にコレクションを繰り返し、変更がないかチェックして、フォームが閉じられてイベントが発生したときにいつでも確認できます。

また、VBAを使用してすべてのフォームを反復し、存在しない場合はモジュールを追加して、そのモジュールに目的のコードを追加することもできます。 (おそらくコードを作成してそのアクションを元に戻すことができれば、コードを実際に維持することができます。それを洗練しながら、フォームにすでにアクションがあるかどうかを確認し、存在する場合はそれにコードを追加することができます。

すべてが可能ですが難しいです。いくつかのステップにポインターが必要な場合、私はそれらを与えることができますが、実装上の大きな問題については別の質問をしたいと思います。

+0

OK、VBAを使用してVBEオブジェクトにアクセスし、コードを変更できます。それはExcelで動作し、私はそれをしましたが、私はそれが特に安定しているとは考えていませんでした。アクセスはi.m.h.oです。確かにExcelよりも安定していない...しかし、それは可能性があります。いずれにせよありがとう。 – McWilliamsPete

+0

自分自身で不安定になることはありませんでした。データベースへの排他的アクセスが必要ですが、1回限りの変更です。しかし、言われたように、私の好みは最初のもの(定期的に開いた書式をチェックする形式)です。 –