【VBA】ひとつのフォームを有効活用する方法

みなさんこんにちは、ケンケンです。

今回は、VBAのユーザーフォームにひと工夫することで有効活用する方法をご紹介します。

 

テクニックのひとつとして覚えておくといいでしょう。

それではいってみましょう。

 

フォームはできるだけ少なく効率的に作ろう

ユーザーフォームを作っているときに一番大変なのは、フォーム(部品)を大量に作ることです。

フォームの中のオブジェクトもさらに詳細に作っていると、作者も混乱してきてメンテナンスに時間がかかることも多々あります。

それを少し改善する方法としてあげられるのは、ひとつのフォームを有効活用して、複数の値を取得できるようにすることです。

何のことかよくわからないと思いますので、実際に以下の手順に沿って作成していきましょう。

フォーム(部品)を作ろう

まずは、元となるフォームを作ります。

今回は、一覧選択フォームから「商品一覧マスター」「従業員マスター」「顧客マスター」へ飛ぶ仕組みを作ります。

その際に、各マスターをひとつずつ作るのではなく、ひとつのフォームで3つ表示できるようにします。

フォームを作りオブジェクトとCaptionを設定しよう

ふたつのフォームを作り、そこにオブジェクト名とCaption名を以下のように設定します。

ふたつのフォームを連携してみよう

マスター選択フォーム(F_Master)の開くボタンを押すとマスター一覧フォーム(F_Mst_List)が開くように連携します。

F_Masterのフォームモジュールを上図のように開きClickイベントに上記のようにコードを書きます。

ついでに閉じるボタンを押したときのコードも追加しておきましょう。

 

さらに標準モジュールを作成し、F_Masterフォームが開くように設定し、エクセルシートにボタンを作っておきましょう。

 

 

ForEachステートメントで値を取得しよう

さあ下準備は終了しました。

今回のメインであるForEachステートメントで値を取得する方法を使うことで、

ひとつのフォームを多面的に使うことが出来るようになります。

 

F_Mst_ListフォームのInitializeイベントプロシージャに以下のコードを書きます。

①フォーム上にあるオプションボタンを変数宣言

②F_Mst_Listフォーム上のフレーム上にあるコントロールすべてを集合として認識する

③オプションボタンの値がTrueだったら以下の処理をします

④Meは自分自身つまり、F_Mst_Listフォームを表します。

そのフォームのラベルのCaptionにオプションボタンのCaptionを代入します。

コードを実行してみましょう。以下のようになれば成功です。

いかがですか?

この方法だとひとつのフォームで3つのデータを表示させることが出来るようになりましたね。

使う部品が少ないとメンテナンス性にすぐれ、後で見返す時や仕様変更する際にも比較的簡単に

処理可能なのでぜひ試してみてください。

今回はフォームを表示するだけでしたが、当然それぞれのリストに別々のデータを流し込んで完成なので、それはご自分で挑戦してみてください。

もしかすると、データの流し込み方も今後ご紹介するかもしれないのでお楽しみに。

 

関連記事

みなさん、こんにちはケンケンです。   今回は、ユーザーフォームの作り方をご紹介します。   実務でよく耳にするのは「管理データを作っているけど、横に長い表にたくさんの項目を入力するのが面倒!」といった声です。 […]