• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ボタン押下でサブフォームのレコードソースを変更)

ボタン押下でサブフォームのレコードソースを変更する方法を探しています

このQ&Aのポイント
  • ボタンを押下することで、サブフォームのレコードソースを変更する方法を探しています。
  • 元とするテーブルは同じですが、拾うべきフィールドが異なるため、2つのクエリを作成しました。
  • 現在のところ、「閉じているかまたは存在しないオブジェクトを参照」というエラーが出てしまい、問題が解決できていません。

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

  • ベストアンサー
  • DexMachina
  • ベストアンサー率73% (1287/1744)
回答No.3

> 現在のところ、「閉じているかまたは存在しないオブジェクトを参照」という > エラーが出てしまっています。 サブフォームコントロールには、フォームの他、テーブルやクエリなども 表示させることができます(確かAccess2002か2003で追加された機能)。 こちらで検証したところ、サブフォームコントロールの『ソース オブジェクト』 (プロパティシートの『データ』タブにあります)でフォームを指定していない 状態で、「~.Forms.RecordSource」を参照すると、ご質問と同じエラーが 発生することが確認できました。 クエリを直接表示する場合は、以下のような構文にします: (作成したクエリ名とコード上のクエリ名が異なっていたので、双方載せて  みました)   If [Forms]![検索ウィンドウ]![申込形態] = "1組のみ" Then     Me.検索結果サブフォーム.SourceObject = "クエリ.q_しぼりこみ1"     'Me.検索結果サブフォーム.SourceObject = "クエリ.q_1組のみ"   Else     Me.検索結果サブフォーム.SourceObject = "クエリ.q_しぼりこみ2"     'Me.検索結果サブフォーム.SourceObject = "クエリ.q_女性のみ"   End If 【注意するべきポイント】  ・「.SourceObject」の場合、「.RecordSource」と違って、その前に「.Form」は   入れません(入れるとエラーになります)。  ・フォームをSourceObjectにする場合は、使用するフォーム名を「"」で括る   だけですが、クエリを使用する場合はクエリ名の前に「クエリ.」をつけた   上で、「"」で括る必要があります。   (テーブルの場合は、同様に「テーブル.」をつけます) 【余談/今後のために】 テーブルやクエリをソースオブジェクトに指定した場合、マクロやVBAで 動作を制御することができません。 (例えば、「通常は編集を制限しつつ、コマンドボタンで特定フィールドのみ  編集を一時的に許可する」といった要望に対応できない) 何らかの制御を行いたい場合は、それぞれのクエリを元にしてフォームを 作成し、そのフォームの『既定のビュー』(フォームのプロパティシートの 『書式』タブにあります)を「データシート ビュー」にし、それらのフォームを ソースオブジェクトに指定するようにすれば、クエリと同様の見た目ながら VBA/マクロでの制御も可能にできます。 ※なお、クエリの使い分けが、表示フィールドの違いだけで、絞り込みや   並べ替えは行っていないなら、当該テーブルをレコードソースにした   フォームを2つ作成し、『フィールドリスト』から必要なフィールドだけを   ドラッグ&ドロップ、という方法もありますので、併せて参考まで。   (現在、クエリで行っている使い分けを、フォームに対して行う、と)

picicate
質問者

お礼

御丁寧にありがとうございました! なんとか解決しました。 まとめてですいません。

その他の回答 (2)

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.2

#1です。 Me!サブフォーム表示コントロール名.Form.RecordSource = "q_しぼりこみ1" Me!サブフォーム表示コントロール名.Form.RecordSource = "q_しぼりこみ2" のように、Me. ではなく、Me!としたほうがいいかもしれません。

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.1

Me.検索結果サブフォーム.Form.RecordSource = "q_しぼりこみ1" において、 検索結果サブフォーム のところは、メインフォームのサブフォームを表示する コントロール名で、サブフォームの名前そのもではなく、 初期値は「埋め込み0」のような名前になっています。 もしウィザードなどで作るとサブフォーム名と同じに なっているかもしれませんが、一度確かめてみてください。

専門家に質問してみよう