メイン/サブフォーム形式のフォームでは、”リンクフィールド”(リンク親フィールド/リンク子フィールドプロパティ)が設定してあれば、メインフォーム側のレコード移動や、テキストボックスへの入力値あるいはコンボボックスの選択値などに応じて自動的にサブフォーム内の表示レコードが切り替わります。
ただ、サブフォーム側のデータ量やレコードソースのクエリの複雑さなどによって、ほんのワンテンポ、サブフォームの抽出レコードの切り替えレスポンスが遅いように感じる場合があります。
そのような場合、Accessの自動的なリンク機能に任せ切りにせず、VBAのちょっとしたコードを入れることで、感覚的に素早く表示切り替えさせることができます。
ここでは、そのプログラム例を2つ紹介します。いずれも、サブフォームコントロールの名前が「発注先_sub」であるとします。そしてプログラムとしてはそのサブフォームコントロールを”再クエリするだけ”です。
■メインフォームのレコード移動に応じてサブフォームを切り替える場合
メインフォーム側の「レコード移動時」イベントプロシージャを次のようにします。
Private Sub Form_Current()
Me!発注先_sub.Requery
End Sub
■メインフォームのコンボボックスに応じてサブフォームを切り替える場合
メインフォーム側のコンボボックス(ここでは「ID」という名前のコントロール)の「更新後処理」イベントプロシージャを次のようにします。
Private Sub ID_AfterUpdate()
Me!発注先_sub.Requery
End Sub
|