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

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

ボタン押下でサブフォームのレコードソースを変更

ボタン押下でサブフォームのレコードソースを変更 する方法を探しています。 元とするテーブルは同じですが、拾うべきフィールドが全く異なるため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

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

  • ベストアンサー
  • 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」のような名前になっています。 もしウィザードなどで作るとサブフォーム名と同じに なっているかもしれませんが、一度確かめてみてください。

関連するQ&A

  • 親フォームからサブフォームのレコードソースを設定

    親フォームからサブフォームのレコードソースを設定するには? フォーム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 とするとコンパイルエラーになります。 良い方法があれば教えてください。アドバイスよろしくお願いします。

  • Access サブフォームのレコードソースを変更するには

    Accessのプロシージャについて教えてください。 フォーム FM0020 上に、2つのサブフォーム FS002001 と、FS002002 があります。 メインフォームにある値を使って、サブフォームのレコードソースを変更したい のですが、どうもうまくできません。 FS002001のレコードソースは下記の1行目のコードで変数strSQLに代入出来るのですが、 FS002002のレコードソースは下記の2行目のようにしても 「オブジェクトまたはクラスがこのイベントセットをサポートしていません」 となり、代入出来ないのです。 2つ目のサブフォーム上にあるテキストボックス HMCD が下記3行目のように すると代入できるので、サブフォームの名前を間違えているわけではないと思うのですが...。 他に原因としては何が考えられますか? 下記の3行を同じモジュール内に続けて書いても2行目だけがひっかかるのでもうお手上げ 状態です..。 なんとか助けてください。 お願いします。 strSQL = Forms!FM0020.FS002001.Form.RecordSource strSQL = Forms!FM0020.FS002002.Form.RecordSource strSQL = Forms!FM0020.FS002002!HMCD

  • ACCESS97 サブフォームのレコードソースプロパティーを変更したい。

    フォームの中にサブフォーム(データシート)が1つあります。 元のフォームのチェックボックスのオン・オフでサブフォームのレコードソースプロパティーを変更すると、 実行時エラー438 オブジェクトはこのプロパティまたはメソッドをサポートしていません。がでます。 サブフォームのビューは変更したくありません。 だれか助けてください。 If Me.未送信のみ = -1 Then Forms!F_処理選択!F_理選択サブ.RecordSource = "F_処理選択サブ_1" Else Forms!F_処理選択!F_処理選択サブ.RecordSource = "F_処理選択サブ_2" End If

  • サブフォームでクエリの更新

    「Q検索」というクエリと「F検索」というフォームを作成しフォーム上には「番号テキスト」とコマンドボタンを作成後、F検索にQ検索をドラッグしてQ検索のサブフォームを作成しました。 Q検索の番号フィールドの抽出条件には[Forms]![F検索]![番号テキスト]は入力しています。 やりたいことは 番号テキストに番号を入力しコマンドボタンをクリックしたら 一致する番号だけをサブフォームに表示させたいのですがどうすればいいのかわかりません。 今の状態は コマンドボタンのクリックイベントにVBA DoCmd.OpenQuery "Q検索", acNormal, acEdit 普通にクエリが開いてしまいます。 これをサブフォームで行うにはどうすればいいのでしょうか? よろしくお願いします。

  • 選択クエリーについて

    すでに出来上がっている選択クエリーを実行したときに、何レコード抽出されるか事前に知りたい場合、 DCountのような関数で知ることは可能でしょうか? Me![F_サブフォーム名].Form.RecordSource = "Q_クエリー名"のように、 サブフォームで明細を表示する前に、何件合致しましたという表示をさせたいのですが・・・。 (選択クエリーなので、テーブルを作成しているわけではありません。)

  • 【Access2007】サブフォームのRecordSourceの設定で

    【Access2007】サブフォームのRecordSourceの設定で実行時エラー 2146500594が発生します。 Access2007SP2で、メインフォーム上に帳票フォーム形式のサブフォームがあります。 サブフォームのRecordSourceプロパティを下記のようなコードで設定していますが、添付画像のようなエラーになってしまいます。 Forms![親フォーム]![サブフォーム].Form!RecordSource = strSQL strSQL(sql文)自体は正しく値を取得できることを確認済みです。 原因や解決策を何度か検索してみましたが、見つかりませんでした。 対処方法をご存知でしたらご教示お願いします。

  • サブフォームをリクエリするには?

    アクセスのフォームにはサブフォームがあり、 親フォームの上にあるコマンドボタンで、テーブルに対してアクションクエリでレコードの削除やレコードの更新を行います。 サブフォームにはそのテーブルをソースとしたデータを表示させているのですが、 親フォームの上にあるコマンドボタンのイベントの最後に、 Me.Controls("サブフォーム").Requery を入れても、フォームのデータが#Deletedになります。 Me.Requery でも、サブフォームのデータは#Deletedになってしまいます。 フォームを開きなおしたり、並べ替えをすればデータが表示されますが コマンドボタン押下後にイベントを実行し終わったら、サブフォームのデータも更新されたデータを表示するさせるには どうすればいいでしょうか?

  • サブフォームに変数を代入し、RecordSourceの値を取得したい

    サブフォームに変数を代入し、RecordSourceの値を取得したいのですがうまくいきません。 Sub test1() Dim サブフォーム As String Dim フォーム As String フォーム= "土台" サブフォーム = "フォーム1" MsgBox Form_フォーム1.RecordSource End Sub ******************************************************************* Sub test2() Dim サブフォーム As String Dim フォーム As String フォーム= "土台" サブフォーム = "フォーム1" MsgBox Form_フォーム1.RecordSource MsgBox Forms(フォーム).Controls(サブフォーム).RecordSource End Sub オブジェクトは、このプロパティまたはメソッドをサポートしていません。(Error 438) ******************************************************************* Sub test3() Dim サブフォーム As String Dim フォーム As String フォーム = "土台" サブフォーム = "フォーム1" MsgBox Forms(サブフォーム).RecordSource End Sub 実行時エラー'2450' マクロの式またはVisual Basic コート゛で参照されている 'フォーム名'フォームが見つかりません。 ******************************************************************* test1~3のうち test1のみはうまくいくのですが 変数を代入したいです。 ヘルフ゜のには Forms![受注]![受注サブフォーム].Formとなってますが これじゃ変数を代入できないですよね。 どうすればサブフォームに変数を代入しつつ、RecordSourceの値を取得できるのでしょうか? よろしくお願いします。

  • サブフォームで自動採番

    お世話になります。ACCESS2000で制作しています 主テーブル(マスタ)に顧客コード(主キー)、 サブテーブル(トラン)に顧客コードと枝番 というフィールドがあります。 顧客コードでリレーションシップを結んでいます。 それぞれのテーブルからクエリを経てフォームをつくり (Q_マスタ→F_マスタ、Q_トラン→F_トラン) また、検索フォームも別に作っています。 F_トランはF_マスタに埋め込んでいます。 検索フォームで検索して該当するデータが無い場合 DoCmd.OpenForm "F_マスタ", , , , acFormAdd で新規フォームを呼び出します。 このときサブフォームの枝番に自動的に「1」を入れたいのですが (開く時でも読み込み時でもいつでもいいのですが) どうしたら良いのでしょうか? ちなみに今は サブフォームのプロシージャで Private Sub Form_Open(Cancel As Integer)  If Me.NewRecord Then   Me![枝番] = 1  Else   Me![枝番] = DMax("枝番", "Q_トラン") + 1  End If End Sub としています。 こうするとQ_マスタの一番上のデータが 例えばQ_トランレコードを2つ持っていると 「3」と出てしまいます。 どのようにすればいいのでしょうか。 よろしくお願いします。

  • サブフォームの参照

    accessにて・・・ メインフォームに二つのサブフォームがあります(sub_A,sub_B)とします。 sub_A から sub_B のレコードソースを参照するにはどういう風にすればいいのでしょうか? me.parent.sub_B.form.recordsource でやってみたのですが、ダメでした・・・ で指定できるのでしょうか?