タイトル部分をクリックで簡単ソートする方法。開発18日目

MSAccessでアプリ作ってます。簡単にできて効果が高い、フォームのタイトル部分をクリックすると昇順、降順の並び替えが簡単にできるコードを自分のためにメモ。

つまり、こういうやつです。

上の図はふりがな順になってますが、たとえば「お客様ID」のところをクリックすると、順番がソートされます。

お客様IDの昇順になりました。もういちどクリックすると降順になります。こういうのはあると便利です。

じつは上のように同じAccessのフォームでも「データシート」形式を使えばあらかじめこのソートや検索機能はついてきます。けれど、ボタンを設置したり画像を表示したりができないので、複数のアイテム形式でもソート機能をつけるのが今回のテーマです。

タイトル部分はラベルでできています。まず、ここをクリックしたときにFunctionを動かす部分はこんな感じです。

Private Sub lbl_ふりがな_Click()
    sortKey = "ふりがな"
    labelSort (sortKey)
End Sub

sortキーはどのラベルをソートさせるのか区別するためにつけている変数です。labelsortファンクションに渡します。

Function labelSort(sortKey)
    If Me.Form.OrderBy <> sortKey Or Me.Form.OrderBy = sortKey & " DESC" Then
        With Me.Form
        .OrderBy = sortKey
        .OrderByOn = True
        End With
    Else
        With Me.Form
        .OrderBy = sortKey & " DESC"
        .OrderByOn = True
        End With
    End If
End Function

本体はこんな感じです。

ここでラベルにつけていた変数が生きてきます。他のラベルにもソート機能をつけるには、クリックしたときにそのフィールドの名前をFunctionに渡してやるだけなので、ずらずらと以下のように機能を並べていきます。

Private Sub lbl_お客様ID_Click()
    sortKey = "お客様ID"
    labelSort (sortKey)
End Sub


Private Sub lbl_ふりがな_Click()
    sortKey = "ふりがな"
    labelSort (sortKey)
End Sub

Private Sub lbl_過去1年回数_Click()
    sortKey = "過去1年回数"
    labelSort (sortKey)
End Sub

Private Sub lbl_最終来店日_Click()
    sortKey = "最終来店日"
    labelSort (sortKey)
End Sub

Private Sub lbl_氏名_Click()
    sortKey = "氏名"
    labelSort (sortKey)
End Sub

Private Sub lbl_担当者_Click()
    sortKey = "担当者名"
    labelSort (sortKey)
End Sub