• ベストアンサー

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

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

  • ベストアンサー
回答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