Microsoft Access Club >SampleFile Q & A >インデックス >このページ >次頁 < 前項  サイト内検索


Q&A-013 サブフォーム内のオブジェクトからメインフォームを操作する一例



タイトル : フォームの表示/非表示切替
記事No : 11192
投稿日 : 2003/05/05(Mon) 19:19
投稿者 : 成美

OS:Win-XP
Access Version:2000

初心者です。

メインフォームとサブフォームがあり、

メインにチェックボックス“会員”サブに “ 登録日 “ , “ 解約日 “ があり、
チェックボックスのON/OFFによって、サブフォームの表示/非表示ができるようにしてあります。

* マクロ
条   件 : [会員] = On
アクション : 値の代入
アイテム : [F_期間マスター].[Visible]
式     : Yes

メインフォームの “ 会員 “ をチェックすると、サブフォームが表示され “ 登録日” を入力しています。

そこで、サブフォームの “ 解約日 “ を入力するとチェックボックス“会員”が 自動的にOFFになりサブフォームが非表示になるようにしたいのです。


この投稿内で一番重要なことは、「メインフォームからサブフォームを操作する」ということです。メイン、サブの関係で最も悩みトラブルことは、このことですね。

■メインフォーム内からサブフォーム内のオブジェクトを参照

 

Forms![メインフォーム名]![メインフォーム内でサブフォームを格納するオブジェクト名]!
[サブフォーム内のオブジェクト名]

 

サンプルファイルでは下記のような名前設定にしています。

メインフォーム名:frm_sample
メインフォーム内でサブフォームを格納するオブジェクト名:subformobject
サブフォーム内のオブジェクト名:txt解約日

特に、メインフォーム内でサブフォームを格納するオブジェクトは、SubForm オブジェクト と呼ばれています。下図の○印がそれです。

 

 

サンプルファイル内について説明しますと、まずテーブルデータを下記のように設定しています。

メインテーブル

 

サブテーブル

メイン、サブの関係は下記のようなリレーション(1対多)を結んでいます。

 

 

フォームをデザインビューで見ると下記のようになっています。

 

 

> メインフォームの “ 会員 “ をチェックすると、サブフォームが表示され “ 登録日” を入力しています。

これをVBAであらわすと下記のようになります。  #「レコード移動時イベント」はフォームを開いたときにも動作します。

 

Private Sub check会員CK_AfterUpdate()

'会員チェックボックスのOn 、Offによりサブフォームの可視プロパティの値を変化させる。

    If Me.check会員CK.Value = True Then
        Me.subformobject.Visible = True
    Else
        Me.subformobject.Visible = False
    End If

End Sub

 

Private Sub Form_Current()
    
    Call check会員CK_AfterUpdate
    
End Sub

 

 

> サブフォームの “ 解約日 “ を入力するとチェックボックス“会員”が 自動的にOFFになりサブフォームが非表示になるように

この機能をVBAで実現するために、下記のように「レコード移動時イベント」をアレンジします。

 

Private Sub Form_Current()

'サブフォームのtxt解約日にデータ入力があれば、
'会員チェックボックスの値をFalse、サブフォームを非表示に。
    
    If Forms!frm_sample!subformobject!txt解約日 <> "" Then
        Me.check会員CK.Value = False
        Me.subformobject.Visible = False
    End If
    
    Call check会員CK_AfterUpdate
    
End Sub

 

以上で完了です。

 

2003/05/09


Q&A-013 サブフォーム内のオブジェクトからメインフォームを操作する一例


 

-Microsoft Access Club-