B-Teck!

お仕事からゲームまで幅広く

【VBA】リストボックスを選択したり解除したりするメモ

前提

用意

  • テーブル
    f:id:beatdjam:20151029202913p:plain
  • フォーム
    f:id:beatdjam:20151029203529p:plain

コード

リストボックスを全て選択・選択解除

[リストボックスの名前].Selected(数字)はリストボックスの指定項目の選択状態のプロパティ。
Trueにすると選択状態に、Falseにすると非選択状態になる。

'リストボックスを全て選択
Private Sub btn_allSelect_Click()
    Dim i As Long
    
    'リスト件数分ループしてSelectedをTrueにする
    For i = 0 To Me.ListBox.ListCount - 1
        ListBox.Selected(i) = True
    Next
End Sub

'リストボックスを全て選択解除
Private Sub btn_allClear_Click()
    Dim i As Long
    
    'リスト件数分ループしてSelectedをFalseにする
    For i = 0 To Me.ListBox.ListCount - 1
        ListBox.Selected(i) = False
    Next
End Sub

選択項目を取得してテーブルに保存・読み込んで選択状態にする

[リストボックスの名前].ItemData(数字)はリストボックスの指定項目の値を取得するプロパティ。

'選択項目を取得してテーブルに保存する
Private Sub btn_saveList_Click()
    Dim i As Long
    
    '保存用ワークを初期化
    CurrentDb.Execute ("DELETE FROM 選択したデータ")
    
    'リスト件数分ループして選択されている項目をワークにINSERTする
    For i = 0 To ListBox.ListCount - 1
        If ListBox.Selected(i) = True Then
            CurrentDb.Execute ("INSERT INTO 選択したデータ(test)VALUES('" _
                                                    & ListBox.ItemData(i) & "')")
        End If
    Next i

End Sub

'テーブルに保存された項目を読み込み選択する
Private Sub btn_readList_Click()
    Dim i As Long
    Dim rs As Recordset
    
    'ワークのレコードセットを開く
    Set rs = CurrentDb.OpenRecordset("SELECT test FROM 選択したデータ")
       
    'リストの項目全件に対して、読み込んだワークに存在するかを判定する
    For i = 0 To ListBox.ListCount - 1
         rs.FindFirst "test='" & ListBox.ItemData(i) & "'"
         '合致したもののみTrue
         If Not rs.NoMatch Then
            ListBox.Selected(i) = True
         End If
    Next i
    
End Sub