ボタン押下でサブフォームのレコードソースを変更
する方法を探しています。
元とするテーブルは同じですが、拾うべきフィールドが全く異なるため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で質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
「これはヤバかったな」という遅刻エピソード
寝坊だったり、不測の事態だったり、いずれにしても遅刻の思い出はいつ思い出しても冷や汗をかいてしまいますよね。特にものすごく怒られたときとか、とんでもない損害を与えてしまったときとか…。
-
親フォームからサブフォームのレコードソースを設定
Access(アクセス)
-
ACCSESS2013VBA フォームのレコードソースを変更する
その他(データベース)
-
Access サブフォームのレコードソースを変更するには
Access(アクセス)
-
-
4
【Access】サブフォームのソースオブジェクトを入れ替えたい
Access(アクセス)
-
5
日付型のフィールドに空白を入れる方法を教えてください
その他(データベース)
-
6
AccessVBA RecordSourceのリセットについて
Access(アクセス)
-
7
Accessのサブフォームから値を参照する方法について
その他(データベース)
-
8
Access サブフォームでの選択行の取得
その他(データベース)
-
9
Accessで、一覧からクリックして詳細表示したい
その他(Microsoft Office)
-
10
ACCESSでコントロールソースの変更
Access(アクセス)
-
11
accessVBA 「フォームが見つかりません」
その他(データベース)
-
12
ACCESSのフォーム、開くんですが、見えないようにするには
Access(アクセス)
-
13
Accessのフォーム上にレコード数とレコード番号の表示
その他(データベース)
-
14
フォームのデータシートビューにてVBAで直接記述したSQL文を実行した結果を返すことは不可能でしょうか?
Access(アクセス)
-
15
Accessでテーブル名やクエリ名一覧の抜き出し
Access(アクセス)
-
16
Access 別フォームへの再クエリ(更新)がしたい。
その他(データベース)
-
17
Accessで埋め込んだサブフォーム(データシート形式)でデータ追加ができない
Access(アクセス)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
サブフォームのイベント取得
-
Googleフォーム・複数人の申し...
-
フォーム上の全てのコントロー...
-
Accessのトグルボタンでサブフ...
-
VB.net(VB)で、フォームにExcel...
-
AccessVBAでサブフォームの値チ...
-
Access 無操作の場合、自動で閉...
-
ExcelVBAでフォーム内でブック...
-
Google form を利用して 問い合...
-
VB2008
-
アクセス フォームが存在する...
-
サブフォームのコントロールの...
-
毎日新聞「女の気持ち」匿名希...
-
リストボックスの選択解除
-
メッセージボックスの背景色
-
C# マルチディスプレイにて、...
-
[C#]別フォームとの連動について
-
メルカリのメルカードで買い物...
-
「ご処理進めて頂きますようお...
-
お家デートをしててハグを長い...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Googleフォーム・複数人の申し...
-
Accessでフォームから別フォー...
-
VBAにてメッセージボックスを最...
-
リストボックスの選択解除
-
メッセージボックスの背景色
-
accessで2つ以上のフォームを起...
-
サブフォームの新規レコードに...
-
フォーム上の全てのコントロー...
-
アクセスVBA フォームのス...
-
サブフォームの行ごとにコンボ...
-
サブフォームのイベント取得
-
メインフォームからサブフォー...
-
Access 無操作の場合、自動で閉...
-
VBAでフォームのスクロールバー...
-
ディスプレイ解像度より大きな...
-
ユーザーフォーム上にアイコン...
-
VBプログラムの終了
-
PDFフォームに本日の日付を自動...
-
ExcelVBAでフォーム内でブック...
-
アクセス フォームが存在する...
おすすめ情報