• ベストアンサー

accessVBAでのコードの表記方法について

Sub test() Form_親フォーム.Requery Forms("親フォーム").Requery Forms!親フォーム.Requery End Sub 上記のコードで、すべて問題なく実行できるのですが、 それぞれ「○○方式」という書き方の名前をご存知の方教えてくださいませ。

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

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

「○○方式」というような名前は特にないと思います。 ただ、それぞれ微妙に動作が異なりますので、注意が必要です。 まず、 Forms("親フォーム").Requery Forms!親フォーム.Requery の二つですがFormsコレクションから参照してます。 Formsコレクションには現在、開いてるフォームが格納されていますので、開いていないフォームを参照しようとするとエラーになります。 また、Forms!親フォーム の参照法の方が高速らしいです。 変数にフォーム名を代入して使用する場合は()で参照する方法を使用します。 Dim FormName As String FormName = "親フォーム" Forms(FormName).Requery 次に、 Form_親フォーム.Requery の方法はあまり一般的ではないです。Form_親フォーム というのはフォームのクラス名で、実態ではないです。クラスとは何かを説明し出すと長くなるので雛形(設計図)みたいなものだととりあえずご理解ください。 この方法は、フォームの「コード保持」が「はい」の時のみ参照できます。(「いいえ」のときはクラスが生成されない。) この方法で参照する場合、フォームが開いているなら、そのフォームを参照します。 フォームが開いていない場合に参照するとフォームを開いて、Requery を実行します。ただし非表示の状態で開かれますので開いたことに気がつきにくいです。下記のようにすると表示されます。 Form_T_業務内容.Requery Form_T_業務内容.Visible = True ですので開いてないときにこの方法で参照すると「開くとき」とか「読み込み時」とか「レコード移動時」にイベントプロシージャが設定されているとそれも連鎖的に実行されてしまいます。 フォームオブジェクトは、サブフォームに埋めこんだり、Newステートメントで開いたりして、複数の実態(フォーム)を生成することが可能です。この場合、クラス名から参照する方法では、どの実態を参照するかはそのとき次第になります。 というようにクラス名で参照する方法はいろいろ複雑かつ難解なのできちんと理解した上で使うことをお勧めします。

RMCNDQGJR
質問者

お礼

回答ありがとうございました。

関連するQ&A