• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:サブフォームに変数を代入し、RecordSourceの値を取得したい)

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

このQ&Aのポイント
  • サブフォームに変数を代入してRecordSourceの値を取得する方法について説明します。
  • test1のコードではうまくいくが、変数を使ってRecordSourceの値を取得する方法がわからない。
  • 詳細な手順については説明していないが、サブフォームに変数を代入しつつRecordSourceの値を取得する方法を教えて欲しい。

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

  • ベストアンサー
  • DexMachina
  • ベストアンサー率73% (1287/1744)
回答No.2

No.1です。 > この「.Form」はどこにつければいいのでしょうか? えーと・・・すみません、後半に余計な説明が多すぎたようです(汗) 一応、前回回答の前半部分に書いていたんですが、式としては  MsgBox Forms(フォーム).Controls(サブフォーム).Form.RecordSource になります。 蛇足ついでに、式の構成を簡単に(?)説明すると、  Forms(~)   展開済のフォーム群(=複数形:Formsコレクション)から、指定された   名前のフォームを参照  Controls(~)   そのフォーム内のコントロール群(=複数形:Controlsコレクション)から、   指定された名前のコントロールを参照  Form.RecordSource   指定したコントロール(サブフォーム)の、フォームとしてのプロパティ   (ここではRecordSource)を参照   (「Form」プロパティを経由しないと、サブフォームの「RecordSource」    プロパティを参照できない、ということ) ということです。 ※「Forms」と「Form」は英単語上は前者が後者の複数形という関係ですが、  プログラム上での関連性は薄いので、前者が前側につき、後者が後ろ側  につくのは、「コレクションやプロパティの使い方・定義がそうなって  いるから」として割り切るしかないかと思います(汗) ・・・また余計な説明が長くなりすぎた気がしますが(汗)、参考まで。

nifufu2
質問者

お礼

すいません。 読みこぼしていました。 試してみたらうまくいきました。 豆知識も大変参考になりました。 また何かあったらよろしくお願いします。

その他の回答 (1)

  • DexMachina
  • ベストアンサー率73% (1287/1744)
回答No.1

変数名に全角文字を使用することの是非は、この際おいておくとして・・・(汗) 【サブフォームの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」フォームが「土台」フォーム内のサブフォームとしてのみ 開いていて、メインフォームとして開かれてはいない場合は、ご質問にあるように 「フォームが見つかりません」(「フォーム名」となっているのは、打ち間違い?) というエラーになります。

nifufu2
質問者

お礼

ありがとうございます。 変数名については以後気をつけます。 <test3>については理解できました。 <test2>については理解力がなくよくわからないのですが >そのため、「サブフォームの、フォームとしてのプロパティ(RecordSource等)」の >参照には、「.Form」(メインフォームの参照時と違い、ここは「s」が入らない)が 必要になります。 この「.Form」はどこにつければいいのでしょうか? MsgBox Form(サブフォーム).RecordSource MsgBox Forms(フォーム).Form(サブフォーム).RecordSource MsgBox Forms(フォーム).Form.Controls(サブフォーム).RecordSource もエラーになってしまいました。

関連するQ&A