- ベストアンサー
Access式ビルダでのサブフォーム参照について
メインフォーム名 「売上明細フォーム」 サブフォーム名 「売上明細サブフォーム」です。 サブフォームのテキストボックスの値をメインフォームに表示させるため、式ビルダから参照させるとき、リストで展開して出てくる項目で以下の2つの違いがわかりません。 ・組み込まれたフォーム ・すべてのフォーム どっちからでも一緒のことでできそうだと思うのですが、組み込まれたフォームからは参照されずエラーになります。 この2つの違いはなんですか??
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
補足を受けまして。 「F住所サブ」は単独で表示してもエラーにならない のであれば、たとえば、「F住所サブ」を単独で表示しているとき、 「F住所サブ」の「住所」というフィールドの値を他のフォームに 表示したい場合(親フォーム以外)、他のフォームの ボタンクリックなどで、 Private Sub コマンドボタン1_Click() Me!テキストボックス1 = Forms!F住所サブ!住所 End Sub あるいは、反対に、「F住所サブ」のフィールドのダブルクリック などで、 Private Sub 住所_DblClick(Cancel As Integer) Forms!受け取るフォーム名!テキストボックス = Me!住所 End Sub のようにします。「メインフォーム」を表示し、 その中の「F住所サブ」の「住所」をダブルクリックして 他のフォームに表示する場合も、「F住所サブ」に コードを書きますから、コードの内容は上記と 同じです。 サブフォームをメインフォームに連結させて使う限りは サブフォーム自身の名前が出てくることはほとんどありません。 >この2つのそれぞれの使い方ってなんですか? >メインフォームにサブフォームの値を取得したいときは、[埋め込み0].Form![住所] なんですよね? これが、答えになるかと。 強いて言えば、フォーム名の登録には必ず名前を 必要とする(当たり前ですが)、ということぐらいですか。 なお、ウィザードで「メインフォーム」-「サブフォーム」 を作成すれば、メインフォームの「サブフォーム表示 コントロール名」は自動的に「サブフォーム名」が 適用されるようです。この場合は、「サブフォーム名」 が出てきますが、これはあくまでも「サブフォーム 表示コントロール名」が「サブフォーム名」と同じ にしてある、というだけで、あくまでも必要なのは 「サブフォーム表示コントロール名」なのです。
その他の回答 (4)
- chayamati
- ベストアンサー率41% (260/624)
サブフォーム上ではメインフォームのボックスを参照できますが メインフォーム上からはサブフォームのボックスを参照できません メインフォームの一つのレコードにサブフォームの複数のレコードが存在するためでしょう
お礼
そうなんですか。 メイン/サブフォームってちょっと複雑…。 ありがとうございました!感謝です!
- piroin654
- ベストアンサー率75% (692/917)
No2です。 質問のフォーム名に合わせるならば、 ################################################################ メインフォームからサブフォームのコントロール を参照する場合、たとえば「売上明細サブフォーム」という名前の フォームをサブフォームにしたときに、サブフォームの合計 というテキストボックスを参照する場合、 式ビルダを使った場合、「読み込まれたフォーム」と 「すべてのフォーム」を使った場合の違いは、 「読み込まれたフォーム」の場合 [埋め込み0].Form![合計] 「すべてのフォーム」の場合 Forms![売上明細サブフォーム]![合計] です。 ############################################################### です。
お礼
piroin654 様 いろいろと書いてくださりありがとうございます。 >メインフォームからサブフォームの コントロールなどの値を参照する場合、 もっとも気をつけなければならないのは サブフォームのそのもの名前ではなく、 サブフォームを表示しているコントロールの名前 を最初にもってこなければならない、という ことです。 そうなんですか。 解決したいことがあります。 >式ビルダを使った場合、「読み込まれたフォーム」と 「すべてのフォーム」を使った場合の違いは、 「読み込まれたフォーム」の場合 [埋め込み0].Form![住所] 「すべてのフォーム」の場合 Forms![F住所サブ]![住所] この2つのそれぞれの使い方ってなんですか? メインフォームにサブフォームの値を取得したいときは、[埋め込み0].Form![住所] なんですよね? Forms![F住所サブ]![住所] ってどういう時使いますか?? お願いします。
- piroin654
- ベストアンサー率75% (692/917)
「読み込まれたフォーム」は現在のフォームに 連結しているフォームを表示します。 「すべてのフォーム」の場合はそのファイルに 登録しているフォームを表示します。 メインフォームからサブフォームのコントロール を参照する場合、たとえば「F住所サブ」という名前の フォームをサブフォームにしたときに、サブフォームの住所 というテキストボックスを参照する場合、 式ビルダを使った場合、「読み込まれたフォーム」と 「すべてのフォーム」を使った場合の違いは、 「読み込まれたフォーム」の場合 [埋め込み0].Form![住所] 「すべてのフォーム」の場合 Forms![F住所サブ]![住所] です。 メインフォームからサブフォームの コントロールなどの値を参照する場合、 もっとも気をつけなければならないのは サブフォームのそのもの名前ではなく、 サブフォームを表示しているコントロールの名前 を最初にもってこなければならない、という ことです。上記の場合は「埋め込み0」がこの場合 になります。なお、このコントロールの名前を サブフォームの名前と同じにしている場合は サブフォームの名前と同じコントロール名が 表示されます。「式ビルダ」の「読み込まれたフォーム」 で便利に取り扱えるようにしているのが特徴です。 一方、「すべてのフォーム」は、他のフォームから参照、 あるいは指定できる、そのファイルでの「フルパス」のような ものです。
- m3_maki
- ベストアンサー率64% (296/460)
直接の回答ではありませんが、雰囲気はお分かりいただけるでしょうか? アクセス2003のサブフォームコントロールの参照について http://okwave.jp/qa/q5478482.html
お礼
ありがとうございます。 う~ん・・・難しい
お礼
そーなんですか。納得しました。 解決できました!! ご丁寧に長々とありがとうございました。 更なる深い習得のためにVBAも知っとかなくちゃ使いこなせないですかね。アプリ操作だけではなく。 piroin654 さんありがとうございました。