Access2002でサブフォームのデータを取得する方法

このQ&Aのポイント
  • Access2002で作成したフォーム内のサブフォームからデータを取得する方法について教えてください。
  • フォーム内にあるサブフォームのデータを参照するためのコードがうまく動かないようです。どうすればデータを取得できるでしょうか?
  • F_備考フォーム内の「入力」ボタンを押すと、サブフォーム上の「氏名ID」と「データ年」を自動で入力したいですが、エラーメッセージが表示されてしまいます。解決策を教えてください。
回答を見る
  • ベストアンサー

サブフォームのデータをそのままひっぱってきたい。

Access2002です。 T_マスタ・T_サブ・T_備考という3つのテーブルをもとに F_マスタ・F_サブ・F_備考という3つのフォームを作成しています。 F_マスタの中にF_サブをサブフォームとして設定してあります。(氏名IDでリンク) F_サブの中に、Fサブ上の情報(氏名ID・データ年)で検索をして開く F_備考を開くためのコマンドボタンを設置してあります。 そこでF_備考を開いた後に、何も検索結果が出されなかったら、 入力をするために、「入力」というボタンを設置しました。 このボタンを押すと、F_サブ上の「氏名ID」「データ年」を 自動でF_備考の同じ名前のところへ入力したいのです。 ですが、実行すると「F_サブフォームは見つからない」という旨の エラーが出てしまいます。 それならF_サブを開いてしまえと、コマンドボタン上に、 F_サブを開く設定をしたのですが、今度は 「サブフォームに設定してあるフォームは開けない」という エラーメッセージが表示されてしまいました。 サブフォームのデータをそのまま参照することはできないのでしょうか? 実際のコードは以下のような簡単なものです。 F_備考の「入力」ボタン Me!氏名ID = Forms![F_サブ]![氏名ID] Me!データ年 = Forms![F_サブ]![データ年] どうやったらデータをひっぱってこれるのでしょうか? 宜しくお願いします。

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

  • ベストアンサー
  • harumimi
  • ベストアンサー率46% (51/109)
回答No.1

>Me!氏名ID = Forms![F_サブ]![氏名ID] >Me!データ年 = Forms![F_サブ]![データ年] Me!氏名ID = Forms!F_マスタ!F_サブ.Form!氏名ID Me!データ年 = Forms!F_マスタ!F_サブ.Form!データ年 こんな感じで参照できると思いますよ。 サブフォームの項目をとってくるにはメインのフォームから指定すると参照できます。

KODAMAR
質問者

お礼

はい、できました! ありがとうございました。 >サブフォームの項目をとってくるにはメインのフォームから指定すると参照できます。 これは知りませんでした。 今後も使用頻度が高いと思いますので、覚えておこうとおもいます。 本当にありがとうございました。

関連するQ&A

  • サブフォーム用のテーブルのデータで検索をしてマスタフォームに表示したい。

    Access2000での質問です。 T_マスタ(氏名ID・氏名)・T_サブ(氏名ID・データ年・データ種類)というテーブルから F_マスタ・F_サブというフォームを作成し、 F_マスタの中にサブフォームとしてF_サブを入れています。(氏名IDでリンク) F_検索というフォームを作成し、 データ年・データ種類で検索するようにしました。 この結果を、F_マスタで表示したいのですが、 F_マスタはT_マスタから作成されているため、検索結果が 希望するものではなくなってしまいます。 F_サブでみればきちんと検索されているのですが、 それでは氏名がみれないので。。。 このようなことはできるのでしょうか? F_検索の検索ボタンのコードです。 ------- Private Sub コマンド1_Click() Dim SQL As String Dim WhereCond As String Dim condNendo As String Dim condSyurui As String 'データ年 If Me!データ年.Value <> "" Then condNendo = "(T_サブ.データ年 like '*" & Me!データ年.Value & "*')" WhereCond = WhereCond & " AND " & condNendo End If '種類 If Me!データ種類.Value <> "" Then condSyurui = "(T_サブ.データ種類 like '*" & Me!データ種類.Value & "*')" WhereCond = WhereCond & " AND " & condSyurui End If WhereCond = Mid(WhereCond, 6) DoCmd.OpenForm "F_サブ", acNormal, , WhereCond End Sub ------- *上記の「F_サブ」を[F_マスタ」で開くようにしたいのです。 宜しくお願いします。

  • サブフォームからフィルターをかけてフォームを開く。

    いつもお世話になっております。 テーブル(T_弁護士)とテーブル(T_案件)の 二つを作成し、それを基にして、 それぞれ(F_弁護士)と(F_案件)があります。 F_弁護士フォームにはサブフォームを作成して そこにT_案件のうち個々の担当する案件の一覧を データシート形式で表示させています。 このサブフォームはクエリー(Q_弁護士から案件)を 基にしたフォーム(SF_弁護士から案件のサブフォーム)で、 そのクエリーではT_弁護士とT_案件を T_弁護士の氏名フィールドを(1) 対 T_案件の担当者名(多)でリレーションシップを組み T_案件の案件名の抽出条件 (Like "*" & [forms]![F_弁護士]![氏名] & "*")と 設定して、複数の案件の一覧を表示させています。 そして、このサブフォーム (SF_弁護士から案件のサブフォーム)の一覧から それぞれの案件IDをクリックして 個々の案件を特定し、F_案件で 表示オープンさせたいと考え、 クリック時の埋め込みマクロで フォームを開く[F_案件]、 Where条件式、 [ID]=[Forms]![SF_弁護士から案件のサブフォーム]![ID] としたところパラメーターの入力というダイアログ ボックスが出て [Forms!SF_弁護士から案件のサブフォーム!ID] というふうに いちいちIDの入力を求められます。 その都度、IDを入力すれば表示オープンさせられるのですが、 これを解消して直にクリックしたIDの案件を 表示させたいのです。 皆様、何かとお忙しいとは存じますが どうかお知恵をお貸しください。 どうぞよろしくお願いいたします。

  • Accessでチェックしたらサブフォームもチェック

    T_マスタテーブル ・ID ・氏名 ・チェック T_サブテーブル ・ID ・住所 ・チェック となっていて、それぞれフォームを作成していて、 F_マスタフォームの中にF_サブフォームが入っています。 (IDでリンク) マスタテーブルに 1001  山田 太朗   というデータがあったとすると サブには 1001 東京都*** と入っているのですが、 サブは1人につき、1件とは限らず、 1001 東京都渋谷区*** 1001 東京都新宿区*** 1001 埼玉県さいたま市*** となっていることもあります。 F_マスタフォームのチェックの「更新後処理」に Private Sub チェック_AfterUpdate() If チェック = True Then [Form]![F_サブフォーム]![チェック] = True Else [Form]![F_サブフォーム]![チェック] = False End If End Sub と入っていて、F_マスタの方にチェックをすればF_サブのほうにもチェックが 入るようにしたいのですが、 1件目しかチェックがされません。 IDが同じもののチェックにはすべてチェックがされるようにするには どのようにかけばいいのでしょうか? 宜しくお願いします。 Ac2000です。

  • Access2007 サブフォームの新規レコードをすぐにフォームに表示させる方法

    サブフォーム上で適当なレコード(IDと商品名)を選択して、そのレコードにある入力ボタンを押すと、フォームのコンボボックス上にその商品名が出るようなフォームがあります。 すでに入力済みのIDと商品名は表示されます。 ところが、サブフォーム上でIDと商品名を新規入力して入力ボタンを押すと、フォームのコンボボックスは空白となり、商品データが表示されません。 しかし、一旦フォームを閉じて開くと、データは表示されています。 IDと商品名を新規入力して、そのままフォームのコンボボックスに反映させたいと思います。 入力ボタンはこのようにやってみました。 Private Sub 入力_Click() DoCmd.DoMenuItem acFormBar, acRecordsMenu, acSaveRecord, , acMenuVer70 Forms!フォーム!ID = Me.ID End Sub または、 Private Sub 入力_Click() DoCmd.RunCommand acCmdSaveRecord Forms!フォーム!ID = Me.ID End Sub ご教授いただければ幸いです。よろしくお願いいたします。

  • ACCESSサブフォームにデータ反映されない

    よろしくお願いします。 Access2010を使っています。 メインフォームにあるテキストボックス2つに条件を入力し、 抽出したデータをサブフォームで表示させたいと思います。 ●メインフォーム名「フォーム1」 テキストボックス2つ「tex1」「tex2」 ●データ元クエリ「q1」 フィールド名「ID1」「ID2」「Name」 ●サブフォームSQL SELECT q1.Name FROM q1 WHERE (((q1.ID1) = Forms![フォーム1]!tex1) And ((q1.ID2) = Forms![フォーム1]!tex2))); フォームを開き、tex1とtex2に入力してもサブフォーム表示が変わりません。 サブフォームをデータシートで別に開くと、データ抽出できていることは確認できました。 サブフォームのコントロールソースへSQLを入力するだけでは、 メインフォーム内でのデータは反映されないんでしょうか??

  • ACCESS2003 サブフォームのデータ

    こんにちは。宜しくお願い致します。 ACCESS2003でDBを作成しています。 メインフォームの中にサブフォームを作っています。 それぞれのID(オートナンバー)をリレーションシップとして設定し、連動しています。 メインフォームにデータを追加する際、サブフォームにデータを入力せずに、 次のメインフォームにデータを入れた場合、 サブフォームのオートナンバーが働かず、のちのちデータを入れた際にIDが違うため情報がずれてしまいます。 例えば、 メインフォームのID1~9のサブフォームには何も書き込まずメインフォームにだけデータを入力します。 その後、メインフォームのID10にあるサブフォームにデータを書き込むと、立ち上げなおしたときに、そのサブフォームへの入力したデータがID1のデータとして出てきてしまいます。 恐らく簡単なことだとは思うのですが、なにぶん初心者なものでさっぱり分かりません。 お分かりになる方、是非ともご教授お願いいたします。

  • AC2000でフォームから入力したデータをサブフォームに表示

    ID 商品名 単位 単価で商品マスタフォームを作っています。このフォーム内にサブフォームを作っておいて データが入力するたびにサブフォームへ表示させたいのですが、このときの条件としてID(オートナンバー)を降順(最新のデータが一番上になる)・データシート形式にしたいと思います。 T_商品(テーブル名) Q_商品(IDを降順としたクエリ) MF_商品(各入力テキストボックスがあるフォーム) SF_商品(MF_商品に貼り付けるサブフォーム) 降順にすると一番若いIDのデータだけがサブフォームに 表示されるのです。 requeryは必要なのでしょうか? よろしくお願い致します。

  • ACCESS2003でサブフォームを使う

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

  • サブフォームをリクエリしたい

    メインフォームのコマンドボタンを押下するとvbaを使ってテーブルのデータを更新します。 メインフォームの中にはサブフォームがあり、 そのサブフォームとテーブルがリンクしています。 サブフォームにはテーブルのデータが表示されており、 メインフォームのコマンドボタン押下→テーブルデータ更新 がされると、全て#Deletedという文字が表示されます。 なので、 Private Sub cmd_データ更新_Click() Call データ更新 Me.Controls("Fサブ").Form.Requery End Sub としたのですが、 「実行時エラー’2465’:指定した式で参照されている’Fサブ’フィールドが見つかりません。」 が発生します。 Me.Controls("Fサブ").Requery これにしても同じでした。

  • Access2000 サブフォームのRecordSet取得法

    Access2000を用い、メインフォームを作成(F_Main)し、 サブフォームコントロール(sub_from)を配置しました。 sub_formの「ソースオブジェクト」プロパティを別フォーム(F_Sub)とし、F_Subのレコードソースにはテーブル(T_Name)を設定しました。 つまり、メインフォームに子フォームが配置された状態です。 このF_Subのテーブルのレコードを操作するため、以下のプログラムを作りましたが、「フォームF_Subが見つかりません。」というエラーになってしまいます。 Dim rs as Recordset rs = Forms![F_Sub].RecordsetClone ← エラー メインフォームのモジュールでも、サブフォームのモジュールでもどちらにこのプログラムを記述してもエラーが発生します。 メインフォーム上に配置したサブフォームのレコードセットを取得し、操作する方法をご教授下さい。 環境 Windows 2000 Professional Access 2000

専門家に質問してみよう