- ベストアンサー
ACCESS2003でサブフォームを使う方法とは?
- ACCESS2003で親フォームにサブフォームの内容を表示させる方法を教えてください。
- サブフォームをクリックすると、親フォームの内容も切り替わる方法についても教えてください。
- VBAを利用する必要がある場合、参考になるページやコードを教えてください。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
> 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