たま氏の覚え書き

KNIME・AccessVBA・Swift等、学習したことを覚え書き

AccessVBA_サブフォーム / サブレポートおよび各コントロールの参照

フォームやレポート内に設定したサブフォームやサブレポートを参照する場合の記述例
(Formのあとの「s」のつくつかないでひっかけ問題みたいになるのだろうなぁ…)

サブフォーム / サブレポートとは

以下の記事がとても分かりやすい、メインフォーム・サブフォームは
テーブルが1対多のリレーションシップが設定されている場合に作成できるんだって、しらなんだ

▼よくわかる記事▼
Accessのフォームのメイン/サブフォームとは | できるネット

▼リレーションシップについて解説した過去記事▼
tama-shi.hatenadiary.com

サブフォーム名_サブフォームコントロールの名前、「名前」プロパティの設定値
サブフォームコントロールの名前とサブフォーム自体の名前が一緒とは限らない

メインのモジュールからサブを参照

オブジェクトの参照:
Me. サブフォーム名 . Form . メソッドorプロパティ
Me. サブフォーム名 . Report . メソッドorプロパティ
コントロールの参照:
Me . サブフォーム名 . Form . コントロール . メソッドorプロパティ
Me . サブフォーム名 . Report . コントロール . メソッドorプロパティ
※「Me.」は省略してもOK

メイン以外のモジュールからサブを参照

オブジェクトの参照:
Forms("フォーム名") . サブフォーム名 . Form . メソッドorプロパティ
Reports("フォーム名") . サブフォーム名 . Report . メソッドorプロパティ
コントロールの参照:
Forms("フォーム名") . サブフォーム名 . Form . コントロール名 . メソッドorプロパティ
Reports("フォーム名") . サブフォーム名 . Report . コントロール名 . メソッドorプロパティ
※フォーム・サポート名にスペースが含まれる場合には必ず「""」「[]」のどちらかで囲む

サブからメインを参照

【Parent】プロパティを使用、指定したオブジェクトの親オブジェクトを返すプロパティ
※以下の場合「Me」は、サブフォーム / レポートを指す

オブジェクトの参照:
Me . Parent . メソッドorプロパティ コントロールの参照:
Me . Parent . コントロール名 . メソッドorプロパティ

【記述例】メインフォームとサブフォームをお互いに参照

メインフォームとサブフォームにそれぞれ設置したボタンを押すとLabelのキャプションが更新されるようにしてみる

サブフォームからメインフォームを参照▼

Private Sub btn1_Click() 'サブフォームのコントロール「ボタン1」に記述
  Me.lbl1.Caption = "サブだけどなに?" 
  Me.Parent.lbl1.Caption = "メインさんいる?" 'メインを参照
End Sub

▼メインフォームからサブフォーム「subF」を参照▼

Private Sub btn1_Click() 'メインフォームのコントロール「ボタン1」に記述
  Me.lbl1.Caption = "なぁにわたしはメイン" 
  Me.subF.Form.lbl1Caption = "おいサブ" 'サブを参照
End Sub