●Excel VBAでプログラミング その7
ここまでで、ユーザーフォームによるデータ選択画面までが出来上がりましたのでこのフォームにプログラムを追加します。やりたいことは以下のとおりです。
1.フォームの選択画面のリストボックスに住所録データや品目データを表示する。
2.データを選択して「選択」ボタンを押すと画面を閉じて選択データを呼び出し下に返します。
3.「キャンセル」ボタンを押した場合は何もデータを返さずに画面を閉じます。
1.リストボックスへのデータ表示について
リストボックスにデータを表示しようとした場合どうすべきかと言うと、まずリストボックスのプロパティを見てみます。FrmDataSelectをプロジェクトエクスプローラーで選択し表示します。その後リストボックスを選択するとプロパティウインドウにプロパティが表示されます。
それぞれのプロパティの意味を調べていくといくつかのプロパティがデータ表示に関連していることがわかります。
ここで設定に使用するプロパティは以下のとおりです。
1.RowSource
このプロパティにはリストボックスで表示するデータの範囲を指定します。
2.columCount
このプロパティでは1行に表示するデータの個数(フィールドの数)を指定します。
3.ColumnWidth
個々ではそれぞれのフィールドの表示幅をポイント単位で指定します。
4.ColumnHeads
ここではデータ見出しのオンオフを指定します。
これらのプロパティはフォームを表示する前に設定しておく必要がありさらに、固定値で指定するのではなくワークシートの一部でその情報を定義するようにしておけばどのようなデータに対しても使用できるフォームを作れます。
このように固定値でプログラムを書くのではなく変化する部分を何らかの定義により変更できるようにしておくことで再利用可能なプログラムを作ることが可能になります。
以上の事項を踏まえた上で、必要な事項をまとめると
1.表示するデータを保存したシートの名前が必要
2.レコード毎のフィールド数
3.データの表示幅
4.レコード数が必要です。
これらを得るためにどうするかと言うとシート名を得ることができれば、保存されているデータの状況からプログラムでレコード数、フィールド数、を知ることができるのでシート名と言うのが重要な要素であることがわかります。
次にデータの表示幅は入力されているデータの文字数で大体の長さを知ることができますが毎回調べて計算させるよりも定義から得たほうが単純に済むので定義から表示幅を得るものとします。
さらにデータを選択されたときデータを返す場所が必要になります。これも定義の位置に連動した場所にあると便利であるためこれらの定義は1枚のシートの一部を使うようにプログラミングします。
と言うことで、定義用に一枚ノートを使うことにします。ワークシートを新たに挿入しシート名を「動作環境の定義」の意味でEnvと言う名前を付け、オブジェクト名をEnvSheetに変更します。そこに先ほどの定義を埋めてみると以下のようになります。
このような定義の位置をフォームに与えるとフォーム側のコードで対応した選択フォームを生成し動作するようにプログラミングします。
ここまでのシートはこちらからダウンロードできます。