• ベストアンサー

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

  • soka
  • お礼率92% (13/14)

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

  • ベストアンサー
回答No.2

2行目の >strSQL = Forms!FM0020.FS002002.Form.RecordSource を >strSQL = Forms!FM0020.FS002002.Form.Width にしても、「オブジェクトまたはクラスがこのイベントセットをサポートしていません」のエラーが出ますか? Forms!FM0020.FS002002.Form.DUMMY のように、Form までは正しくて、存在しないプロパティを指定すると 「アプリケーション定義またはオブジェクト定義のエラーです。」となるんですけど、 Forms!FM0020.FS002002.DUMMY.RecordSource のように正しくないサブフォームのプロパティを指定すると、「オブジェクトまたはクラスがこのイベントセットをサポートしていません」となりましたので、 Forms!FM0020.FS002002 から先の部分がおかしいようですね。 推測されるのは、「Form」と書いているつもりで「Forms」になってしまっている、とかいうことくらいですかね・・・。 あとは、メインフォームの RecordSource に FS002002 というフィールドがあるとか。(そんなわけないと思いますけど・・・) ちなみに Access のバージョンは何でしょうか?

soka
質問者

お礼

早速の回答ありがとうございました。 Accessのバージョンは2000です。 2行目を >strSQL = Forms!FM0020.FS002002.Form.Width にしてもやはりサポートしていませんのエラーになりました。 1行目をコピーして、サブフォーム名だけFS002002に変更してもエラーになってしまうんです。 と言いますか、何回かちゃんと動いていたのに、いきなりこの行だけエラーが出るようになってしまって。 何が悪かったのか分からなくてほとほと困ってます…

その他の回答 (2)

回答No.3

>と言いますか、何回かちゃんと動いていたのに、 >いきなりこの行だけエラーが出るようになってしまって。 あっ、もしかして、「参照設定」の中で「参照不可」になっているものがありませんか?もしあれば、間違いなくそれが原因ですが・・・。なければ・・・私にはお手上げです。

soka
質問者

お礼

何度もすみませんでした。 残念ながら「参照不可」になってるものは見当たりませんでした…。 しかしダメ元で新しい別のmdbファイルにごそっとインポートしてみたら、 他には何もしていないのにちゃんと動くようになりました! ただ、見比べてみても一体どこが違うのかよく分からなかったのでまた 同じ現象が起きそうでちょっと怖くはあるのですが…。 とりあえずなんとかなって一安心です。 このたびは本当にありがとうございました。

noname#7099
noname#7099
回答No.1

 サブフォームなので、「リンク親フィールド」「リンク子フィールド」の個数や形式(テキストや数値)などが異なると、サブフォームのレコードソースを変更したときにリンクがつながらないことがあります。  対策としては、 1)「リンク親フィールド」「リンク子フィールド」の個数や形式を同一にする 2)サブフォームのレコードソースを変更できない場合、同じ場所に別のサブフォームを重ねて設計する。不要なサブフォームを「非表示」にする。ただし、サブフォームが複数ぶらさがるので、処理が遅くなる可能性があります。 (1の方法でも、再表示に時間がかかるので結構処理に時間がかかる場合があります。効率よくレコードソースを変更したり非表示にするタイミングを考えてみてください)  自信ないなー。なにかのヒントになれば幸いです。

soka
質問者

お礼

早速のご回答ありがとうございました。 実はサブフォームは非連結...というか、リンク親フィールドもリンク子フィールドも指定していないんです。 メインフォームに入力された値を元にSQLを作成してデータを表示させようとしているので、その都度内容が違っているためサブフォームを重ねるわけにも行かず..。 でも、サブフォームを重ねるという手段もあるのですね! また何かの際に利用したいと思います。 ありがとうございました。

関連するQ&A

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

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

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

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

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

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

  • サブフォームのRecordSourceの件数を取得したい

    <環境>access2007、db:sqlserver2005 メインフォームに日付のテキストボックスがあり、その日付に一致したデータをサブフォームに表示しています。 メインフォームのOPEN時処理 Set FM = Forms![FTop] Set FS = Forms![FTop]![FTop_sub].Form FS.RecordSource = "select * from aaa where day = '"& fm!day &"'" この時、RecordSourceにセットしたデータの件数を取得したいのですが、 サブフォームのフォームヘッダーにテキストボックスを配置して、 そのコントロールソースを =Count(*) としました。 しかし、"#エラー"と表示されてしまいます。 サブフォームは"帳票フォーム"です。 どこが悪いのか困っています。どなたかご教授お願いします。

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

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

  • サブフォームに変数を代入し、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の値を取得できるのでしょうか? よろしくお願いします。

  • Accessサブフォームのレコード移動

    Accessにおいて、サブフォームのレコードの移動方法をどなたか教えてもらえませんか。「Forms![メインフォーム名]![サブフォーム名].Form.SetFocus DoCmd.GoToRecord acDataForm, "サブフォーム名", acNext」とコーディングしたのですがダメでした。よろしくお願い致します。

  • サブフォームにフィルタをかけたい

    サブフォームにフィルタをかけたいのですが エラーになってしまいます。 下記がエラー内容です。 ---------------------------------------------------------- 実行時エラー 438 オブジェクトは、このプロパティまたはメソッドをサポートしていません。 ---------------------------------------------------------- 細かい概要は テーブル1にフィールドがあり、 レコードには「あああ」と入力されています。 テーブル1がレコードソースとされている「フォーム(2)」をサブフォームとして 親フォーム(フォーム名:フォーム(1))に乗せました。 フォーム(1)を開いた時にフォーム(2)にフィルタをかけたいのですが うまくいきません。 オブジェクト名にカッコを付けているため、 Form_フォーム・・・・ というコードは書けないので ---------------------------------------------------------- Private Sub Form_Open(Cancel As Integer) Forms("フォーム(1)").Controls("フォーム(2)").Form.Filter = "フィールド = '" & "*あ*" & "'" Forms("フォーム(1)").Controls("フォーム(2)").FilterOn = True End Sub ---------------------------------------------------------- としています。 Forms("フォーム(1)").Controls("フォーム(2)").FilterOn = True でエラーになりますが、 この行をなくしたら、フィルタがかかりません。 どうすればサブフォームにフィルタをかける事が出来るのでしょうか? ご教示よろしくお願い致します。

  • Access 指定したレコードへ移動

    お世話になります。 Access2003で在庫管理システムを作っています。 商品マスター登録画面にて商品を検索する際 コマンドボタンで検索画面に移動 テキストボックスに入力した文字列を含む商品を 検索画面内のサブフォームに表示、該当レコードをダブルクリックすると 商品マスター登録画面にその商品が表示される…という ところまでなんとかかんとか作りました。 でもレコードソースを書き換えるところがまずいみたいで 商品マスター登録画面には表示したレコード1件のみしか 表示されなくなってしまいます。 私がやりたいのは単なるレコードの移動です… 調べましたがどうしたらいいのかわかりません。 よろしくお願いします。 検索画面内のサブフォームをダブルクリックしたときのコード Private Sub Form_DblClick(Cancel As Integer) On Error GoTo Err_Form_DblClick   Dim strSQL As String   With Application.Forms("商品マスター登録")     strSQL = "SELECT *"     strSQL = strSQL & " FROM 商品マスター"     strSQL = strSQL & " WHERE 商品ID = " & Me.商品ID     Form_商品マスター登録.RecordSource = strSQL         ↑ここをどう変えればいいでしょうか?   End With Exit_Form_DblClick:   Exit Sub Err_Form_DblClick:   MsgBox Err.Description   Resume Exit_Form_DblClick End Sub

  • Access レコード移動時イベントでサブフォーム

    お世話になります。 親フォーム Aがあります。(データソースが存在します) その中にサブフォームBがあります。(データソースが存在します) 親フォームのレコード移動時のイベントで、いつもサブフォームのレコードの最後を表示したいのです。そこで・・・ 親フォームAの レコード移動時イベントに Private Sub Form_Current() Me.B.SetFocus DoCmd.GoToRecord , , acLast End Sub 上記を記述すると、一番初めはきちんとサブフォームBのレコードは最後を表示するのですが、以後、親フォームのレコードを動かすと、親フォームの最後のレコードをさしっぱなしになってしまいます。 Me.B.SetFocus DoCmd.GoToRecord , , acLast これの後にどんな記述をすれば、親フォームのレコードを動かすと同時にサブフォームBも最後の行に移るようにできますでしょうか? 何卒よろしくお願いいたします。

専門家に質問してみよう