Accessお手本データベースのホームへ戻る

メイン/サブフォーム間で情報を交換するお手本データベース

 

1-4-1 メイン/サブフォーム間で情報交換するフォーム

 

このサンプルデータベースは、メインフォームとサブフォーム間でお互いに情報交換します。情報交換は、メイン/サブフォームにフォーム独自のメソッドとプロパティを作成して行います。(フォームモジュールは、クラスモジュールとして作成されますので、フォームモジュールにメソッド/プロパティを作成することができます。)

 

メインフォームのSet Sub1ボタンをクリックすると、メインフォームのHelloプロパティがサブフォームのHelloSub1プロパティに設定されます。メインフォームのGet Sub1ボタンをクリックすると、サブフォームのHelloSub1プロパティがメインフォームのHelloプロパティに設定されます。メインフォームのMethod1ボタンをクリックすると、サブフォームのHelloSub1プロパティの内容が表示されます。

 

サンプルフォームのように、メインフォームに複数のサブフォームが配置されている場合、サブフォームで取得した情報をメインフォームのプロパティに保存しておくことにより、メインフォームで情報を集中管理することができます。

 

メイン/サブフォーム間で情報交換する具体例は、スタッフのスケジュールを管理するサンプルデータベースで紹介します。

 

サンプルデータベース(CH1-4.mdb)では、以下のノウハウを習得することができます。

 

◆ フォームにアプリ独自のメソッド/プロパティを作成する方法

◆ サブフォームからメインフォームのプロパティを参照/設定する方法

◆ サブフォームからメインフォームのメソッドを実行する方法

◆ メインフォームからサブフォームのプロパティを参照/設定する方法

◆ メインフォームからサブフォームのメソッドを実行する方法

 

   メイン/サブフォーム間で情報交換するフォームを作成するには

 

 Access を起動して作業フォルダに、新規データベース CH1-4.mdbを作成します。

 

 データベースウィンドウからフォームをクリックしたら、新規作成ボタンをクリックします。フォームの新規作成ダイアログが表示されたら、一覧からデザインビューを選択してOKボタンをクリックします。フォームのデザインビューが表示されたら、ツールボックスからテキストボックスのアイコンをクリックして、フォームの上位中央に配置します。テキストボックスのラベル標題をHello Sub1 Propertyに書き替えます。ツールボックスからコマンドボタンのアイコン(Iconコマンドボタン.tif)をクリックしたら、SetGetReSetの3個のボタンを作成します。フォームに作成したコントロールのプロパティを表1-4-1のように設定します。

 

1-4-1 フォーム frmSub1に作成したコントロールのプロパティ

コントロールの種類

プロパティ

テキストボックス

名前

txtHello

コマンドボタン1

名前

cmdSet

コマンドボタン2

名前

cmdGet

コマンドボタン3

名前

cmdReSet

 

 

1-4-2 サブフォーム frmSub1にテキストボックスとコマンドボタンを作成した例

 

 メニューからコードのアイコンをクリックして、フォームモジュールを表示させます。CH1-4.mdbを開いたらfrmSub1のフォームモジュールをコピーして貼り付けます。フォームモジュールのソースコードは、リスト1-4-2を参照してください。フォームをfrmSub1の名称で保存します。それから、CH1-4.mdbからモジュールbasMyLibをインポートします。

 

 フォームの新規作成ボタンをクリックしたら、frmSub1を作成した手順でフォームfrmSub2を作成して保存します。

 

1-4-2 フォーム frmSub2に作成したコントロールのプロパティ

コントロールの種類

プロパティ

テキストボックス

名前

txtHello

コマンドボタン1

名前

cmdSet

コマンドボタン2

名前

cmdGet

コマンドボタン3

名前

cmdReSet

 

 

1-4-3 サブフォーム frmSub2にテキストボックスとコマンドボタンを作成した例

 

 フォームの新規作成ボタンをクリックして、デザインビューを表示させます。ツールボックスからテキストボックスのアイコンをクリックして、フォームの上位中央に配置します。テキストボックスのラベル標題を、Hello Propertyに書き替えます。ツールボックスからコマンドボタンのアイコンをクリックして、7個のコマンドボタンを作成します。データベースウィンドウからサブフォームfrmSub1のアイコンをドラッグしたら、メインフォームの下位左側に配置します。同様の手順でサブフォームfrmSub2をメインフォームの下位右側に配置します。

 

 

1-4-3 メインフォームに作成したコントロールのプロパティ

コントロールの種類

プロパティ

テキストボックス

名前

txtHello

コマンドボタン1

名前

cmdMethod1

コマンドボタン2

名前

cmdSetSub1

コマンドボタン3

名前

cmdGetSub1

コマンドボタン4

名前

cmdMethod2

コマンドボタン5

名前

cmdSetSub2

コマンドボタン6

名前

cmdGetSub2

コマンドボタン7

名前

cmdReSet

サブフォーム1

名前

frmSub1

サブフォーム2

名前

frmSub2

 

 

1-4-4 メインフォームfrmMainにサブフォームを配置した例

 

 メニューからコードのアイコンをクリックしてフォームモジュールを表示させます。CH1-4.mdbを開いたら、frmMainのフォームモジュールをコピーして貼り付けます。フォームモジュールのソースコードは、リスト1-4-1を参照してください。メインフォームをfrmMainの名称で保存して閉じます。

 

 メインフォームfrmMainをビューモードで開いたら、MethodSetGetコマンドをクリックしてメイン/サブフォーム間で情報が交換されるか確認します。

 

 Accessを終了させます。

 

 

1-4-5 フォーム独自のメソッド/プロパティの使い方

 

 

Property Get/Let Hello

フォーム独自のHelloプロパティを定義します。Getは、プロパティの参照、Letは、プロパティの更新を意味します。プロパティを保存するメモリ変数は、モジュールの先頭で定義します。

 

Private mstrHello As String

 

 

Sub cmdGetSub1_Click()/Sub cmdGetSub2_Click()イベントの処理

これらのイベントは、メインフォームのGetSub1/GetSub2ボタンをクリックしたときに実行されます。これらのイベントでは、サブフォームのHelloSub1/HelloSub2プロパティを取得して、メインフォームのHelloプロパティに設定します。

 

  Me.Hello = Me.frmSub1.Form.HelloSub1

  Me.Hello = Me.frmSub2.Form.HelloSub2

 

 

Sub cmdSetSub1_Click()/cmdSetSub1_Click()イベントの処理

これらのイベントは、メインフォームのSetSub1/SetSub2ボタンをクリックしたときに実行されます。これらのイベントでは、メインフォームのHelloプロパティを取得して、サブフォームのHelloSub1/HelloSub2プロパティに設定します。

 

Me.frmSub1.Form.HelloSub1 = Me.Hello

  Me.frmSub2.Form.HelloSub2 = Me.Hello

 

 

Sub cmdMethod1_Click()/cmdMethod1_Click()イベントの処理

これらのイベントは、メインフォームのMethod1/Method2ボタンをクリックしたときに実行されます。これらのイベントでは、サブフォームに定義されているMethodSub1/MethodSub2メソッドを実行します。

 

  Me.frmSub1.Form.MethodSub1

                Me.frmSub2.Form.MethodSub2

 

サブフォームからメインフォームのメソッドを実行するには:

 

                Me.Parent.MethodMain

 

のように記述します。

 

 

リスト1-4-1 frmMainのフォームモジュール

Option Compare Database

Option Explicit

 

Private mstrHello As String

 

'------------------------------------

' Form Specific Property: Hello

'------------------------------------

Public Property Get Hello() As String

  Hello = mstrHello

End Property

 

Public Property Let Hello(strHello As String)

  mstrHello = strHello

  ShowHello

End Property

 

'------------------------------------

' Form Specific method

'------------------------------------

Private Sub ShowHello()

  Me.txtHello = Me.Hello

End Sub

 

'------------------------------------

' Event Procedures

'------------------------------------

Private Sub Form_Open(Cancel As Integer)

  SetAppTitle_FS ("Main/Sub Form Communications (C) " _

    & Year(Date) & " by Akio Kasai")

End Sub

 

Private Sub Form_Load()

  Me.Hello = "Hello Main"

End Sub

 

Private Sub txtHello_AfterUpdate()

  Me.Hello = Nz(Me.txtHello, "")

End Sub

 

Private Sub cmdGetSub1_Click()

  Me.Hello = Me.frmSub1.Form.HelloSub1

End Sub

 

Private Sub cmdGetSub2_Click()

  Me.Hello = Me.frmSub2.Form.HelloSub2

End Sub

 

Private Sub cmdMethod1_Click()

  Me.frmSub1.Form.MethodSub1

End Sub

 

Private Sub cmdMethod2_Click()

  Me.frmSub2.Form.MethodSub2

End Sub

 

Private Sub cmdReSet_Click()

  Me.Hello = "Hello Main"

End Sub

 

Private Sub cmdSetSub1_Click()

  Me.frmSub1.Form.HelloSub1 = Me.Hello

End Sub

 

Private Sub cmdSetSub2_Click()

  Me.frmSub2.Form.HelloSub2 = Me.Hello

End Sub

 

 

 

Property Get/Let HelloSub1()

フォーム独自のHelloSub1プロパティを定義します。 Getは、プロパティの参照、Letは、プロパティの更新を意味します。プロパティを保存するメモリ変数は、モジュールの先頭で定義します。

 

Private mstrHello As String

 

 

Sub MethodSub1()

フォーム独自のメソッドを定義します。他のフォームから参照する場合は、Public属性のサブプロシージャとして定義します。

 

 

Sub cmdGet_Click()イベントの処理

このイベントは、サブフォームのGetボタンをクリックしたときに実行されます。このイベントでは、メインフォームのHelloプロパティを取得して、サブフォームのHelloSub1プロパティに設定します。

 

  Me.HelloSub1 = Me.Parent.Hello

 

 

Sub cmdSet_Click()イベントの処理

このイベントは、サブフォームのSetボタンをクリックしたときに実行されます。このイベントでは、サブフォームのHelloSub1プロパティを取得してメインフォームのHelloプロパティに設定します。

 

  Me.Parent.Hello = Me.HelloSub1

 

 

リスト1-4-2 frmSub1のフォームモジュール

Option Compare Database

Option Explicit

 

Private mstrHello As String

 

'------------------------------------

' Form Specific Property: HelloSub1

'------------------------------------

Public Property Get HelloSub1() As String

  HelloSub1 = mstrHello

End Property

 

Public Property Let HelloSub1(strHello As String)

  mstrHello = strHello

  ShowHello

End Property

 

'------------------------------------

' Form Specific Method: MethodSub1

'------------------------------------

Public Sub MethodSub1()

  MsgBox Me.HelloSub1, vbInformation, "MethodSub1"

End Sub

 

'------------------------------------

' Event Procedures

'------------------------------------

Private Sub cmdGet_Click()

  Me.HelloSub1 = Me.Parent.Hello

End Sub

 

Private Sub cmdReSet_Click()

  Me.HelloSub1 = "Hello Sub1"

End Sub

 

Private Sub cmdSet_Click()

  Me.Parent.Hello = Me.HelloSub1

End Sub

 

Private Sub ShowHello()

  Me.txtHello = Me.HelloSub1

End Sub

 

Private Sub Form_Load()

  Me.HelloSub1 = "Hello Sub1"

End Sub

 

Private Sub txtHello_AfterUpdate()

  Me.HelloSub1 = Nz(Me.txtHello, "")

End Sub

 

 

リスト1-4-3 frmSub2のフォームモジュール

Option Compare Database

Option Explicit

 

Private mstrHello As String

 

'------------------------------------

' Form Specific Property: HelloSub2

'------------------------------------

Public Property Get HelloSub2() As String

  HelloSub2 = mstrHello

End Property

 

Public Property Let HelloSub2(strHello As String)

  mstrHello = strHello

  ShowHello

End Property

 

'------------------------------------

' Form Specific Method: Sub2

'------------------------------------

Public Sub MethodSub2()

  MsgBox Me.HelloSub2, vbInformation, "MethodSub2"

End Sub

 

'------------------------------------

' Event Procedures

'------------------------------------

Private Sub cmdGet_Click()

  Me.HelloSub2 = Me.Parent.Hello

End Sub

 

Private Sub cmdReSet_Click()

  Me.HelloSub2 = "Hello Sub2"

End Sub

 

Private Sub cmdSet_Click()

  Me.Parent.Hello = Me.HelloSub2

End Sub

 

Private Sub ShowHello()

  Me.txtHello = Me.HelloSub2

End Sub

 

Private Sub Form_Load()

  Me.HelloSub2 = "Hello Sub2"

End Sub

 

Private Sub txtHello_AfterUpdate()

  Me.HelloSub2 = Nz(Me.txtHello, "")

End Sub

 

 

ダウンロード (CH1-4.lzh)