#622 | メインフォームのプロシージャをサブフォームから実行させるには? | フォーム、VBA | |
メイン/サブフォーム形式の画面において、ある同じ処理を、メインフォーム側の何らかのアクションで起動したりサブフォーム側からのアクションでも起動したりしたい場合があります。 そのような場合、微妙にコードを変えることでそれぞれのフォームにイベントプロシージャを作ってもよいのですが、いずれかにひとつだけ作って、それを共通的に呼び出すようにした方が作るのも楽ですしあとで修正する場合も一方だけで済みます。 ここではその作成例として、次のような処理を考えてみます。
【デザイン例】 そして、メイン/サブのフォームのモジュールは次のように記述します。 メインフォーム側: Public Sub cmd表示_Click() MsgBox "サブフォームのカレント行の商品名は " & _ Me!frm商品マスタ_sub!商品名 & "です。", vbOKOnly + vbInformation End Sub サブフォーム側: Private Sub 商品コード_DblClick(Cancel As Integer) Parent.cmd表示_Click End Sub Private Sub 商品名_DblClick(Cancel As Integer) Parent.cmd表示_Click End Sub Private Sub 標準原価_DblClick(Cancel As Integer) Parent.cmd表示_Click End Sub ここのでのポイントは、次の2点です。
実行例: 上記の例では、分かりやすくするためサブフォームのテキストボックスごとにイベントプロシージャを作っていますが、これをひとつのFunctionプロシージャとして”サブフォームの方のモジュール上”に作り、プロパティシート上の設定でそれを呼び出すようにすることもできます。 Private Function ShowSubData() Parent.cmd表示_Click End Function プロパティシートでの呼び出し設定ですので、VBEのエディタ上で検索したり置換したりできなくなり、モジュールだけで一括管理できなくなるというデメリットもありますが、同じようなダブルクリック時イベントプロシージャをいくつも書かなくてよいというメリットがあります。たくさんのコントロールに対してイベントを割り当てる場合は楽かもしれません。 |
|||
|
Copyright © T'sWare All rights reserved |