ボタン押下でサブフォームのレコードソースを変更する方法を探しています
- ボタンを押下することで、サブフォームのレコードソースを変更する方法を探しています。
- 元とするテーブルは同じですが、拾うべきフィールドが異なるため、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
- picicate
- お礼率58% (101/172)
- Visual Basic
- 回答数3
- ありがとう数8
- みんなの回答 (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つ作成し、『フィールドリスト』から必要なフィールドだけを ドラッグ&ドロップ、という方法もありますので、併せて参考まで。 (現在、クエリで行っている使い分けを、フォームに対して行う、と)
その他の回答 (2)
- piroin654
- ベストアンサー率75% (692/917)
#1です。 Me!サブフォーム表示コントロール名.Form.RecordSource = "q_しぼりこみ1" Me!サブフォーム表示コントロール名.Form.RecordSource = "q_しぼりこみ2" のように、Me. ではなく、Me!としたほうがいいかもしれません。
- piroin654
- ベストアンサー率75% (692/917)
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文)自体は正しく値を取得できることを確認済みです。 原因や解決策を何度か検索してみましたが、見つかりませんでした。 対処方法をご存知でしたらご教示お願いします。
- ベストアンサー
- Visual Basic
- サブフォームをリクエリするには?
アクセスのフォームにはサブフォームがあり、 親フォームの上にあるコマンドボタンで、テーブルに対してアクションクエリでレコードの削除やレコードの更新を行います。 サブフォームにはそのテーブルをソースとしたデータを表示させているのですが、 親フォームの上にあるコマンドボタンのイベントの最後に、 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 でやってみたのですが、ダメでした・・・ で指定できるのでしょうか?
- 締切済み
- その他(プログラミング・開発)
お礼
御丁寧にありがとうございました! なんとか解決しました。 まとめてですいません。