#695 コンボボックスでリストボックスの並べ替えを切り替えるには? フォーム、VBA

画面のメインとしてリストボックスがあり、そこに表示されているリスト項目をコンボボックスの選択に応じて並べ替える方法です。

ここでは例として次のようなフォームがあるとします。


リストボックスは普通にテーブル等を値集合ソースとして作ります。コントロールの名前は「lst商品マスタ」とします。

そして、画面上部に並べ替え項目を選択するためのコンボボックスを配置します。
ここでは下記のようなプロパティを設定しておきます。
  • 名前 → cbo並べ替え
  • 値集合ソース → 1;商品コード順;2;商品名順;3;販売単価順;4;仕入単価順
  • 値集合タイプ → 値リスト
  • 入力チェック → はい
  • 列数 → 2
  • 列幅 → 0cm

※並べ替えのドロップダウンリストには”商品コード順”のような文字列だけを表示し、内部的な選択値は1から始まる数値で処理するようにしています。「1;商品コード順」のようにセミコロンで区切られた2項目が1セットとなりますので、列数を「2」にするとともに、数値はドロップダウンリストに表示させないようにするため列幅を「0cm」としています。


そして、このコンボボックスの「AfterUpdate/更新後処理」プロシージャを次のようにします。

Private Sub cbo並べ替え_AfterUpdate()
'[並べ替え]コンボボックスの更新後処理

  Const cstrRowSrcSQL As String = "SELECT * FROM 商品マスタ"

  'リストボックスの値集合ソースのSQL文を切り替え
  Me!lst商品マスタ.RowSource = cstrRowSrcSQL & " ORDER BY " & _
                                Choose(Me!cbo並べ替え, "商品コード", "商品名", "販売単価 DESC", "仕入単価")

End Sub


ここでは、リストボックスに表示されるデータ元である値集合ソースについて、テーブル名やクエリ名だけではなく、SQL文で定数cstrRowSrcSQLに固定で設定しておきます。「SELECT 〜 FROM 〜」という構文とし、WHERE句等は含んでいてもよいですが、ORDER BY句は含めないようにしておきます。

そして、選択されたコンボボックスの値に応じたORDER BY句を追記し、そのSQL文全体をリストボックスの「RowSource/値集合ソース」プロパティに代入しています。

実行例:
  • [商品名順]選択時


  • [販売単価順]選択


  • [商品コード順]選択
| Index | Prev | Next |



T'sFactory
Accessで動く生産管理DB
Ureru Express
Webで使う販売顧客管理
Access開発&アドバイス
DB開発やテクニカルアドバイス
Copyright © T'sWare All rights reserved