質問: access2003でサブフォームを使う すみませんが教えてください。 親フォームの中に、サブフォームを作ります。 サブフォームにはクエリの内容が表示されています。 そのサブフォームの内容を、親フォームに表示させたいです。 (サブフォームをクリックすると、親フォームの内容も切り替わる) vbaが必要なのでしょうか。 もしそうであれば、参考になるページ、もしくはコードを教えていただけるとありがたいです。 現在、親フォームのほうには [forms]![登録内容クエリ2フォーム]![登録内容マスタのサブフォーム] ![forms]![内容]と設定しているのですがこのままではうまくいかないのですね;; ヨロシクお願いします。
回答: > 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