プロが教える店舗&オフィスのセキュリティ対策術

親フォームからサブフォームのレコードソースを設定するには?
フォーム1にテーブル1をドロップアンドドラッグして、「テーブル1のサブフォーム」を作成しました。

フォーム1にあるコマンドボタンから「テーブル1のサブフォーム」のRecordSourceを設定する方法を教えてください。

「テーブル1のサブフォーム」からなら
Private Sub Form_Load()
Me.RecordSource = ""
End Sub

とできるのですが、
やりたいことはフォーム1からのイベントなので
「テーブル1のサブフォーム」からのイベントは使えません。

だからってフォーム1の
Private Sub コマンド2_Click()
Me.テーブル1のサブフォーム.RecordSource = "テーブル1のサブフォーム"
End Sub

とするとコンパイルエラーになります。

良い方法があれば教えてください。アドバイスよろしくお願いします。

「親フォームからサブフォームのレコードソー」の質問画像

A 回答 (3件)

No2です。

説明もれがあったので追加しておきます。
No2のところで、

>このとき、「テーブル1のサブフォーム」
>のフィールドには「#Name?」のような表示がされていると
>思います。すなわちこときはサブフォームにはレコードソースが
>設定されていないからです。

としていますが、「#Name?」と表示される理由はフィールドの
コントロールソースが設定されているために、「#Name?」のような
表示が出てきます。


ここからは蛇足ではありますが、コントロールソースが設定されていなければ
こうした表示はでませんが、もしコントロールソースも取り除いて
いるならば、コマンド1でもコマンド2のクリックイベントでもどちらでも
かまいませんが、たとえば「テーブル1のサブフォーム」の
フィールドのコントロールソースをすべて取り除いておいて、
コマンド2のクリックイベントで設定するとすれば、一応
「テーブル1のサブフォーム」のフィールドの名前をID、名前、住所として
テーブル1のフィールド名を同じくID、名前、住所とするならば、

Private Sub コマンド2_Click()
Me.テーブル1のサブフォーム.Form.RecordSource = "テーブル1"
Me.テーブル1のサブフォーム.Form.Controls("ID").ControlSource = "ID"
Me.テーブル1のサブフォーム.Form.Controls("名前").ControlSource = "名前"
Me.テーブル1のサブフォーム.Form.Controls("住所").ControlSource = "住所"
End Sub

として、レコードソース、コントロールソースを設定します。
    • good
    • 1
この回答へのお礼

ありがとうございました。

お礼日時:2012/11/05 23:07

一応、以下を確認をしておきます。



1 「フォーム1」は親フォーム
2 「テーブル1のサブフォーム」はサブフォーム
3 「テーブル1のサブフォーム」のRecordSourceは「テーブル1」

であるとします。何故という部分をわかりやすく
するために以下のように設定してみてください。

1 「テーブル1のサブフォーム」をデザインビューで開き、
  プロパティの「レコードソース」の「テーブル1」を
  削除し、そのまま保存してとじてください。

2 親フォームをデザインビューで開き、サブフォームを
  表示するコントロールのプロパティを開き「ソースオブジェクト」
  の「テーブル1のサブフォーム」を削除し、そのまま閉じてください。
  このとき、サブフォームを表示するコントロールの名前が
  「テーブル1のサブフォーム」になっているのか、あるいは
  「埋め込み0」のような名前になっているのか確認をしてください。
  もし、「埋め込み0」のような名前になっているのならば
  以下のコードの中で「テーブル1のサブフォーム」を
  「埋め込み0」というように変更してください。


フォーム1にコマンドボタンを二つ設定し、それぞれのクリック
イベントに以下を設定します。


'サブフォーム表示コントロールのソースオブジェクトの設定
Private Sub コマンド1_Click()
Me.テーブル1のサブフォーム.SourceObject = "テーブル1のサブフォーム"
End Sub

'サブフォーム表示コントロールに設定するフォームのレコードソースの設定
Private Sub コマンド2_Click()
Me.テーブル1のサブフォーム.Form.RecordSource = "テーブル1"
End Sub


フォーム1のサブフォーム表示コントロール名の設定が
うまくいっていれば、コマンド1のクリックイベントで
「フォーム1」に「テーブル1のサブフォーム」が表示
されたと思います。このとき、「テーブル1のサブフォーム」
のフィールドには「#Name?」のような表示がされていると
思います。すなわちこときはサブフォームにはレコードソースが
設定されていないからです。
次に、コマンド2のクリックイベントで、「テーブル1のサブフォーム」
にレコードが表示されたと思います。


上記は「親フォーム」、「サブフォーム表示コントロール」、
「サブフォーム」の関係を質問のフォームを使って説明したものです。


したがって、質問の回答を端的にするならば、上記の操作を
せずに、

Me.テーブル1のサブフォーム.Form.RecordSource = "テーブル1"

すなわち、上記のコマンド2のクリックイベントが
回答ということになります。
    • good
    • 0
この回答へのお礼

ありがとうございました。

お礼日時:2012/11/05 23:07

Me.テーブル1のサブフォーム.Form.RecordSource = "テーブル1のサブフォーム"

    • good
    • 1
この回答へのお礼

ありがとうございました。

お礼日時:2012/11/05 23:07

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A