Access

検索履歴つきテキストボックスをコンボボックスで実現(Access)(サンプル付き)

2019年11月10日

インターネットブラウザの検索テキストボックスのようにAccessのテキストボックスでも検索履歴を表示させたいと思い、この方法をやってみました。

サンプルを作りました。

DOWNLOAD 

検索履歴つきテキストボックスをコンボボックスで実現(Access)(サンプル付き)


下図のようにコンボボックスとコマンドボタンを配置します。コンボボックスにて文字列を入力して検索ボタンをクリックすると「T_検索履歴」テーブルに履歴が保存されていきます。

テーブル

テーブルにて「T_検索履歴」を作ります。

IDオートナンバー型
検索履歴文字列型

最初の図のコンボボックスの名前は「コンボ0」です。検索用コマンドボタンは「cmd_検索」です。

コンボボックスの【プロパティシート】を開き、【データ】タブの【値集合ソース】を次のようにします。「distinct」を使うことによって重複文字列をひとつにまとめてくれます。

select distinct T_検索履歴.検索履歴 from T_検索履歴

「検索用コマンドボタン」の【プロパティシート】を開き、【イベント】タブの【クリック】時に「コードビルダー」を選びます。

注意

【プロパティシート】の【入力チェック】は「いいえ」にしてください(おそらくデフォルトは「いいえ」)。

VBAコード

VBAのエディタが開きますので下記コードを記入します。コンボボックスの文字列が空の時はテーブルに記載しません。同じ文字列が存在した時も追加しないようにしました。
テーブル「T_検索履歴」の「検索履歴」フィールドに検索文字列がどんどん追加されていきます。

Option Compare Database

Private Sub btn_検索_Click()
    If IsNull(コンボ0) = True Then
        Exit Sub
    Else
    
        '重複データなら検索履歴として追記しない
        If Nz(DLookup("検索履歴", "T_検索履歴", "検索履歴 = '" & txt & "'"), "empty") = "empty" Then
            Dim dbs As Database
            Dim rst As Recordset
            Set dbs = CurrentDb
            Set rst = dbs.OpenRecordset("T_検索履歴", dbOpenDynaset)
            With rst
                .AddNew
                .Fields("検索履歴") = コンボ0.Value
                .Update
                .Close
                Set rst = Nothing
            End With
        End If
    End If
    Me.コンボ0.Requery
End Sub

-Access
-, ,

Please disable your adblocker or whitelist this site!