- ベストアンサー
サブフォームに変数を代入し、RecordSourceの値を取得したい
- サブフォームに変数を代入してRecordSourceの値を取得する方法について説明します。
- test1のコードではうまくいくが、変数を使ってRecordSourceの値を取得する方法がわからない。
- 詳細な手順については説明していないが、サブフォームに変数を代入しつつRecordSourceの値を取得する方法を教えて欲しい。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
No.1です。 > この「.Form」はどこにつければいいのでしょうか? えーと・・・すみません、後半に余計な説明が多すぎたようです(汗) 一応、前回回答の前半部分に書いていたんですが、式としては MsgBox Forms(フォーム).Controls(サブフォーム).Form.RecordSource になります。 蛇足ついでに、式の構成を簡単に(?)説明すると、 Forms(~) 展開済のフォーム群(=複数形:Formsコレクション)から、指定された 名前のフォームを参照 Controls(~) そのフォーム内のコントロール群(=複数形:Controlsコレクション)から、 指定された名前のコントロールを参照 Form.RecordSource 指定したコントロール(サブフォーム)の、フォームとしてのプロパティ (ここではRecordSource)を参照 (「Form」プロパティを経由しないと、サブフォームの「RecordSource」 プロパティを参照できない、ということ) ということです。 ※「Forms」と「Form」は英単語上は前者が後者の複数形という関係ですが、 プログラム上での関連性は薄いので、前者が前側につき、後者が後ろ側 につくのは、「コレクションやプロパティの使い方・定義がそうなって いるから」として割り切るしかないかと思います(汗) ・・・また余計な説明が長くなりすぎた気がしますが(汗)、参考まで。
その他の回答 (1)
- DexMachina
- ベストアンサー率73% (1287/1744)
変数名に全角文字を使用することの是非は、この際おいておくとして・・・(汗) 【サブフォームのRecordSourceをMsgBoxに表示する場合の式】 MsgBox Forms(フォーム).Controls(サブフォーム).Form.RecordSource ※蛇足かもしれませんが、サブフォームの、 「コントロールとしての名前」(プロパティシートの「その他」タブの「名前」)と 「表示に使用しているフォームの名前」(同「データ」タブの「ソースオブジェクト」) が違っている場合は、注意が必要です。 (「サブフォーム」に入れるのは「コントロールとしての名前」の方になります) 【エラーの原因】 <test2> 通常のフォームは「Forms(フォーム名).RecordSource」で参照できますが、 サブフォームの場合、「Forms(フォーム).Controls(サブフォーム)」の時点では 「Controls」という言葉が示す通り「コントロールとしてのサブフォーム」が 参照されている形になります。 そのため、「サブフォームの、フォームとしてのプロパティ(RecordSource等)」の 参照には、「.Form」(メインフォームの参照時と違い、ここは「s」が入らない)が 必要になります。 (コントロールとしてのサブフォームには「RecordSource」というプロパティが ないため、「プロパティをサポートしていない」というエラーになる、と) ※コントロールとしてのサブフォーム」のプロパティ、例えば「ソースオブジェクト (SourceObject)」などを参照する場合は、「.Form」は無用です。 (MsgBox Forms(フォーム名).Controls(サブフォーム名).SourceObject) <test3> 「Forms(フォーム)」の構文で指定できるのは、メインフォームとして展開している フォームに限られます。 そのため、「フォーム1」フォームが「土台」フォーム内のサブフォームとしてのみ 開いていて、メインフォームとして開かれてはいない場合は、ご質問にあるように 「フォームが見つかりません」(「フォーム名」となっているのは、打ち間違い?) というエラーになります。
お礼
ありがとうございます。 変数名については以後気をつけます。 <test3>については理解できました。 <test2>については理解力がなくよくわからないのですが >そのため、「サブフォームの、フォームとしてのプロパティ(RecordSource等)」の >参照には、「.Form」(メインフォームの参照時と違い、ここは「s」が入らない)が 必要になります。 この「.Form」はどこにつければいいのでしょうか? MsgBox Form(サブフォーム).RecordSource MsgBox Forms(フォーム).Form(サブフォーム).RecordSource MsgBox Forms(フォーム).Form.Controls(サブフォーム).RecordSource もエラーになってしまいました。
お礼
すいません。 読みこぼしていました。 試してみたらうまくいきました。 豆知識も大変参考になりました。 また何かあったらよろしくお願いします。