> VBAが必要なのでしょうか。
親フォームのデータに合致するレコードをサブフォームに表示するのであれば
VBAではなくても可能ですが(→サブフォームのプロパティシートで、「リンク親
フィールド」と「リンク子フィールド」を設定)、今回はそれとは逆のパターンなので、
VBA(又はマクロ)が必要です。
仮に、サブフォームのID,Text1,Text2の各データを、親フォームのID,Text1,Text2の
各テキストボックスに転記するのであれば、以下のようになります。
(なお、ここでは、親フォームの各コントロールは非連結と想定しています:
親フォームのデータをサブフォームのデータで上書き、という場合は連結でも可)
'サブフォームのレコード移動時:
Private Sub Form_Current()
'親フォームのID,Text1,Text2の各テキストボックスに、
'サブフォームのID,Text1,Text2のデータを転記します
With Me.Parent
!ID = Me!ID
!Text1 = Me!Text1
!Text2 = Me!Text2
End With
End Sub
------------------------
なお、親フォームも連結フォームで、サブフォームでの選択結果を元にして
レコードを絞り込む、という想定でしたら、親フォームに『対象ID』といった
非連結コントロールを設置して(不可視または使用不可でOK)、これを
絞り込み条件とするクエリを、親フォームのレコードソースにして下さい。
こうすれば、上と同様に、サブフォームのレコード移動時イベントで対象IDに
サブフォームのIDを代入した後、親フォームを再クエリすることで、
親フォームの表示を切り替えられると思います。
親フォームのレコードソース:
Select * From テーブル名 Where ID Like Forms!親フォーム名!対象ID
※親フォームの全レコード表示(絞り込み解除)を、『対象ID』への「*」の代入
で対応するため、「ID = ~」ではなく「ID Like ~」としています。
(ワイルドカード文字(*,#など)を入れなければ、曖昧検索にはなりません)
(フォーム展開時のエラーを回避するため、対象IDの既定値は「"*"」にしておきます)
'サブフォームのレコード移動時:
Private Sub Form_Current()
With Me.Parent
!対象ID = Me!ID
.Requery
End With
End Sub
'親フォームの「絞り込み解除」ボタンのクリック時:
Private Sub 絞り込み解除_Click()
'メッセージボックスで「キャンセル」を選択したら、解除を中止
If MsgBox("絞り込みを解除します。", vbOKCancel, "確認") = vbCancel Then Exit Sub
'対象IDに「*」を代入して再クエリすることで、全レコードを表示
'(親フォーム「ID」が主キーを想定しているため、Null(空白)はないという前提)
With Me
!対象ID = "*"
.Requery
End With
End Sub