• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ACCESS2003でサブフォームを使う)

ACCESS2003でサブフォームを使う方法とは?

このQ&Aのポイント
  • ACCESS2003で親フォームにサブフォームの内容を表示させる方法を教えてください。
  • サブフォームをクリックすると、親フォームの内容も切り替わる方法についても教えてください。
  • VBAを利用する必要がある場合、参考になるページやコードを教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • DexMachina
  • ベストアンサー率73% (1287/1744)
回答No.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

関連するQ&A