コンボボックスに表示される項目の順番は、通常は、テーブルのキー順やクエリーで指定された並び順に固定されています。ここでは、選択頻度の多い順、つまりコンボボックスで選択された回数の多い順に項目を表示する方法をご紹介します。コンボボックスで項目を選択するたびにその表示順が変わる、いわゆる"学習機能"を持たせることができます。
次のような手順で、各テーブルやフォームを設定します。
- コンボボックスのレコードソースとなるテーブルに、選択された回数を保存するフィールド(ここでは"参照回数")を作成します。データ型は「数値」にします。ここでは"tbl所属マスタ"というテーブルをレコードソースとしています。
- フォームにコンボボックスを配置します。ここではその名前を"所属ID"としました。
- コンボボックスの「値集合ソース」プロパティを次のようにします。このSQLステートメントでは、「参照回数」フィールドの並び順が"降順"になるようにします。これによって表示順が参照回数の多い順に設定されます。なお、これと同じ内容のクエリーを作成し、それを値集合ソースにしてもかまいません。
- コンボボックスのその他のプロパティを、必要に合わせて設定します。
- コンボボックスの「更新後処理」イベントプロシージャを次のようにします。
Private Sub 所属ID_AfterUpdate()
Dim dbs As Database
Set dbs = CurrentDb
dbs.Execute "UPDATE tbl所属マスタ SET 参照回数 = 参照回数 + 1 " & _
"WHERE 所属ID = " & Me!所属ID
Me!所属ID.Requery
End Sub
ここでは、更新クエリーをVBAからExecuteメソッドを使って発行しています。コンボボックスで選択された項目(Me!所属IDの値)と同じ「所属ID」を持つtbl所属マスタ上のレコードの、参照回数フィールドの値をインクリメントしています。そして、その結果が画面表示に反映されるよう、最後にコンボボックスの再クエリー(Requeryメソッド)を実行します。
実際にフォームを実行すると、次のようになります。
- はじめて実行したときは、参照回数はすべてゼロなので、所属ID順に表示されます。
- 「営業二課」を選択しました。
- 再度コンボボックスをドロップダウンさせると、「営業二課」が先頭に表示されるようになります。これ以降、項目を選択するたびに、選択された回数に応じて表示順序が変わります。
|