ボタン押下でサブフォームのレコードソースを変更
する方法を探しています。
元とするテーブルは同じですが、拾うべきフィールドが全く異なるため2つのクエリを作成しました。
元テーブル「メンバー一覧」
クエリ「q_1組のみ」「q_女性のみ」
フォームヘッダーにコンボボックスでどちらかのクエリを選択し、ボタンを押したら
サブフォームが表示されるようにしたいのですが、
現在のところ、「閉じているかまたは存在しないオブジェクトを参照」というエラーが出てしまっています。
Me.でもForms("検索ウィンドウ").でも結果は同じでした。
ソースはクエリを指定しています。
Access2007
---------------------------------
Private Sub 検索ボタン_Click()
If [Forms]![検索ウィンドウ]![申込形態] = "1組のみ" Then
Me.検索結果サブフォーム.Form.RecordSource = "q_しぼりこみ1"
Else
Forms("検索ウィンドウ").検索結果サブフォーム.Form.RecordSource = "q_しぼりこみ2"
End If
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つ作成し、『フィールドリスト』から必要なフィールドだけを
ドラッグ&ドロップ、という方法もありますので、併せて参考まで。
(現在、クエリで行っている使い分けを、フォームに対して行う、と)
No.2
- 回答日時:
#1です。
Me!サブフォーム表示コントロール名.Form.RecordSource = "q_しぼりこみ1"
Me!サブフォーム表示コントロール名.Form.RecordSource = "q_しぼりこみ2"
のように、Me. ではなく、Me!としたほうがいいかもしれません。
No.1
- 回答日時:
Me.検索結果サブフォーム.Form.RecordSource = "q_しぼりこみ1"
において、
検索結果サブフォーム
のところは、メインフォームのサブフォームを表示する
コントロール名で、サブフォームの名前そのもではなく、
初期値は「埋め込み0」のような名前になっています。
もしウィザードなどで作るとサブフォーム名と同じに
なっているかもしれませんが、一度確かめてみてください。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) ユーザーフォーム「frm_基本❶」を立ち上げると新規で入力する行数を右下のNoとして表示しています。 1 2023/03/16 19:02
- Visual Basic(VBA) 検索のユーザーフォームの表示について 1 2023/03/27 23:31
- Access(アクセス) AccessVBAで降順にするテーブル作成クエリを使用して作成したテーブルを削除し同一のテーブル作成 1 2023/01/06 11:17
- Access(アクセス) アクセスの更新クエリでカレントレコードのみ更新したい 1 2022/06/02 23:32
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
- Access(アクセス) Accessでセレクタをダブルクリックで別フォームで詳細表示 3 2022/12/20 10:36
- PHP クエリObjectをforeachで回す時に、次のレコードへ移動せずに次のレコードを取得したい 2 2022/07/28 15:29
- Access(アクセス) Accessフォーム 一部のレコードだけを抽出する方法について 1 2022/06/28 18:45
- PHP 【PHP/MySQL】コード上で生成したクエリを基に集計クエリを作りたい 1 2022/07/28 15:06
- その他(データベース) Accessフォームからパラメーターで表示したレコードを指定のExcelのセルへ転送する方法について 2 2022/08/22 18:04
このQ&Aを見た人はこんなQ&Aも見ています
-
「環境が人を育てる」って本当?環境によって人格や生き方は本当に変わるのか
環境が人生に与える影響は実際どれほどのものなのか、専門家の田宮由美さんに伺った。
-
親フォームからサブフォームのレコードソースを設定
Access(アクセス)
-
ACCSESS2013VBA フォームのレコードソースを変更する
その他(データベース)
-
【Access】サブフォームのソースオブジェクトを入れ替えたい
Access(アクセス)
-
-
4
Access サブフォームのレコードソースを変更するには
Access(アクセス)
-
5
Access サブフォームでの選択行の取得
その他(データベース)
-
6
日付型のフィールドに空白を入れる方法を教えてください
その他(データベース)
-
7
サブフォームの切り替え方を教えてください
その他(データベース)
-
8
フォームを開くときに、コンボボックスの値を選択(アクセスVBA)
Visual Basic(VBA)
-
9
AccessVBA RecordSourceのリセットについて
Access(アクセス)
-
10
Accessで、一覧からクリックして詳細表示したい
その他(Microsoft Office)
-
11
Accessのサブフォームから値を参照する方法について
その他(データベース)
-
12
ACCESSでコントロールソースの変更
Access(アクセス)
-
13
Access 最後のレコードに到達するまでループ処理を行う方法
Access(アクセス)
-
14
Accessのフォームで、画面表示されているものを印刷する
Access(アクセス)
-
15
アクセスでの項目追加について(アクセス初心者です)
SQL Server
-
16
ACCESS クエリ→フォーム フィルターをかけたデータのみエクスポートしたい
Excel(エクセル)
-
17
Access(office)のマクロの「値の代入」を使用するとき、式に
その他(データベース)
-
18
フォームのデータシートビューにてVBAで直接記述したSQL文を実行した結果を返すことは不可能でしょうか?
Access(アクセス)
-
19
「RunSQL」と「Execute」の違い
Access(アクセス)
-
20
Accessでテーブル名やクエリ名一覧の抜き出し
Access(アクセス)
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ディスプレイ解像度より大きな...
-
リストボックスの選択解除
-
サブフォームの行ごとにコンボ...
-
Googleフォーム・複数人の申し...
-
VBAにてメッセージボックスを最...
-
ExcelVBAでフォーム内でブック...
-
ユーザーフォーム上にアイコン...
-
メッセージボックスの背景色
-
筋トレについて質問です 身長17...
-
VBA リストボックスをダブルク...
-
accessで2つ以上のフォームを起...
-
VB.NET メッセージボックスが隠...
-
Access 無操作の場合、自動で閉...
-
アクセスVBA フォームのス...
-
子フォームから親フォームのオ...
-
PDFフォームに本日の日付を自動...
-
Googleフォームについて(至急)
-
タブコントロールを含んだフォ...
-
VB.NET 親フォームから子フォー...
-
サブフォームの新規レコードに...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAにてメッセージボックスを最...
-
VB.net(VB)で、フォームにExcel...
-
リストボックスの選択解除
-
Googleフォーム・複数人の申し...
-
サブフォームの新規レコードに...
-
Accessでフォームから別フォー...
-
accessで2つ以上のフォームを起...
-
サブフォームの行ごとにコンボ...
-
フォーム上の全てのコントロー...
-
アクセスVBA フォームのス...
-
VBA リストボックスをダブルク...
-
サブフォームのイベント取得
-
メッセージボックスの背景色
-
PDFフォームに本日の日付を自動...
-
VBAでフォームのスクロールバー...
-
Access 無操作の場合、自動で閉...
-
アクセス フォームが存在する...
-
VBプログラムの終了
-
メインフォームからサブフォー...
-
ユーザーフォーム上にアイコン...
おすすめ情報