#300 | リストボックスの列見出しのクリックで並べ替えを行なう方法 | フォーム、VBA | |
エクスプローラのファイルの詳細表示などでは、リスト上の見出し部分をクリックすることによって、その列を基準とした並べ替えを実行することができます。 ここでは、このような機能をAccessのリストボックスに付加する方法を紹介します。 リストボックスコントロールでは、イベントによってリストのどの項目がクリックされたかは検出することができますが、「列見出し部分がクリックされたということ」あるいは「どの列がクリックされたか」をイベントとして検出することはできません。そこでまず、その方策を工夫する必要があります。ここでは、"MouseDown/マウスボタンクリック時"イベントを使ってそれを判別します。 このイベントでは、リストボックスコントロール上のどの位置がクリックされたかが、左上端からの座標値(XとY)として与えられます。この2つの値を調べることによって上記の判別を行ないます。とはいっても、列見出しの高さやそれぞれの列項目の幅はデザインによって変わりますので、デザインが確定した段階で、それぞれの値を事前に調べておかなければなりません。そこで、フォーム上に2つのテキストボックスを配置して、次のようなMouseMoveイベントプロシージャを作成、これによって列見出しの高さ(Y値)や各列の幅(X値)を確認しておきます。なお、このコードはあくまで開発用のものですので、MouseDownイベントプロシージャが完成したら、テキストボックスといっしょに削除してしまってかまいません。 Private Sub リスト受注_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
'クリック座標確認用コード Me!txtX = X Me!txtY = Y End Sub 各座標値が確認できたら、次のようにしてMouseDownイベントプロシージャを作成し、上記で調べた値をそれぞれ適用します。Case節の数やそれぞれの値、SQL文の内容などは作成するフォーム内容によって変わりますので、適宜書き換えて応用してください。 Private Sub リスト受注_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
'リストボックスでのマウスボタンクリック時 Dim strOrderBy As String Const cstrSQLHeader As String = "SELECT 受注コード, 得意先コード, 社員コード, " & _ "出荷先名, 出荷先都道府県 FROM 受注 ORDER BY " 'Y座標をチェックして列見出し上でのクリックかどうか確認 If Y <= 180 Then '列見出し上でのクリックの場合はどの列でのクリックかを確認し、 'その列をORDER BY句に指定したSQL文を組み立て Select Case X Case Is <= 915 '1列目 strOrderBy = "受注コード" Case Is <= 1995 '2列目 strOrderBy = "得意先コード" Case Is <= 2910 '3列目 strOrderBy = "社員コード" Case Is <= 4890 '4列目 strOrderBy = "出荷先名" Case Else '5列目 strOrderBy = "出荷先都道府県" End Select 'リストボックスの値集合ソースを更新 Me!リスト受注.RowSource = cstrSQLHeader & strOrderBy End If End Sub 2列目の見出しをクリックしたとき 3列目の見出しをクリックしたとき |
|||
|
Copyright © T'sWare All rights reserved |