リストにないデータが入力されるとリストボックスに追加する:Access VBA

テキストボックスに入力されたデータが、リストボックスのリストに登録されていないかどうか調べ、なければ自動的に追加します。

次回から追加されたデータが選択できるようになるので操作者から喜ばれ、入力ミスの防止になります。

ここで使用したAccess VBAのテクニック

  • リストボックスからリストを取り出し、Split関数で要素に分解し配列に入れる。
  • 配列の要素数だけ、For Eachでループする。
  • AddItemでリストに追加する。
BackHome Backテクニック


リストボックスを配置したデータ入力フォームの作成

フォームにリストボックスとテキストボックスを配置します。
リストボックスには値集合ソース プロパティで、いくつかのテキストデータを入力しています。
フォームにリストボックスとテキストボックスを配置する

テキストボックスの入力データが登録されていなければリストボックスに追加するVBA

テキストボックスの更新後処理イベントを[イベント プロシージャ]に設定し、下記VBAを入力します。
テキストボックスの更新後処理イベントにVBAを入力

VBAの解説

・テキストボックスに入力がなければSubプロシージャから抜けます。
・リストボックスのリストが登録されていれば、Split関数で分解し配列に代入します。
・配列の要素数だけ、For Eachでループします。
・要素が文字列の場合、両側の「"」文字を取り除きます。
・テキストボックスの入力データと要素を比較します。
・リストになければAddItemでリストボックスに追加します。
・テキストボックスの入力データをクリアします。

Private Sub テキスト2_AfterUpdate()
    Dim yar As Variant
    Dim t1 As Variant
    Dim bflg As Boolean
    Dim s1 As String
    
    If Nz(Me!テキスト2, "") = "" Then
        Exit Sub
    End If
    
    bflg = False
    If Me!リスト0.RowSource <> "" Then
        yar = Split(Me!リスト0.RowSource, ";")
    
        For Each t1 In yar
            If Left(t1, 1) = """" Then
                s1 = Mid(t1, 2, Len(t1) - 2)
            Else
                s1 = t1
            End If
            If s1 = Me!テキスト2.Value Then
                bflg = True
            End If
        Next
    End If
    
    If bflg = False Then
        Me!リスト0.AddItem Me!テキスト2.Value
    End If
    
    Me!テキスト2 = Null
End Sub

実行結果です。
テキストボックスに未登録のデータを入力し、Enterキーを押します。
テキストボックスに未登録のデータを入力し、Enterキーを押す

するとリストボックスのリストの最後に、入力されたデータが追加されます。
リストボックスのリストの最後にデータが追加

リストボックスのリストの先頭にデータを追加したい場合、Additemにインデックス番号を追加します。
Me!リスト0.AddItem Me!テキスト2.Value, 0
先頭のインデックス番号は0になります。
これで下のように先頭に追加できます。
リストボックスのリストの先頭にデータを追加する


BackHome Backテクニック

Copyright(C) FeedSoft