リストボックス 複数選択リストボックスを2つ使った選択画面 [リストボックス]
複数リストボックスを使って、必要な項目を複数選択してもらう画面の応用です。
選択する項目の数が多い場合、表示される項目がグループ単位で絞り込ができて、必要な項目だけが表示されるようになっていると、作業がしやすいと思います。
例えば、こんなふうに都道府県を選択する画面を考えてみます。
全部の都道府県が表示されていると、目的の項目が探しにくくなります。
そこで、ある程度のグループに分けて、そのグループ単位で、「都道府県」リストボックスに表示される項目を絞り込めるようにします。この例では、「地方」リストボックスで、地方ごとに都道府県が表示されるようにします。
図のように、「地方」リストボックスで、「中国地方」「九州地方」が選択された場合、「都道府県」リストボックスには、その地方にある都道府県が表示されるようにします。
都道府県の表示内容を変える方法は、値集合ソース(RowSource)のSQLを書き換えます。
ここで、ひとつ問題がでます。
都道府県の値集合ソース(RowSource)を書き換えた時、その時までに選択していた都道府県の内容が、すべて解除された状態になってしまいます。
地方を追加で選択する場合は、できればそれまでに選択した都道府県の内容が残った方がいいと思います。地方の選択を解除した場合は、仕方ないと思いますが。
今回の例では、その辺を考慮した内容にしています。
プログラムの作り方は、いろいろな方法があると思いますが、今回は配列に選択内容を一時的に待避して、都道府県が更新された後に選択内容を復元するようにしました。
場合によっては、ワークテーブルを使った方が作りやすい場合もあるかと思います。
使用するデータは下図のとおり。
地方リストボックスは「lstCHIHO」。
設定しているSQLは、
SELECT TMCHIHO.CHIHOCD, TMCHIHO.CHIHOMEI
FROM TMCHIHO
ORDER BY TMCHIHO.CHIHOCD;
で、1列目は非表示にしています。
都道府県リストボックスは「lstTDFK」。
設定しているSQLは、プログラムのとおり。
地方コード、都道府県コード、都道府県名の3列になっていますが、地方コードと度道府県コードは非表示にしています。
連結列は「2」列目に設定しています。
地方リストボックスの選択内容が変わった場合に、プログラムを実行するようにします。「更新後処理」にイベントプロシージャを設定します。
Private Sub lstCHIHO_AfterUpdate() Dim lngTDFK() As Long Dim strSQL As String
'都道府県SQL作成 '1)都道府県のSQL '2)リストの選択状態から条件作成 '3)WHERE条件 '4)レコードソース設定
|
ざっくり説明になりますが、最初にとりあえず、現在の状態で都道府県リストの項目数ほどの配列を定義します。
都道府県リストの選択状況をチェックしながら、選択された都道府県コードを配列に詰めていきます。選択されていない場合、配列は余るんですが、気にしません。
その後、地方リストボックスの選択内容から、都道府県リストボックスのSQLを作成します。
都道府県リストボックスが更新された後に、配列に待避したコードが新しい都道府県リストボックスに無いかチェックして、一致した場合は選択状態にします。
こういったユーザーインターフェースが作成できると、設計のバリエーションが増えると思います。
コメント 0