|
◆◆質問内容
EXCELでユーザーフォームを作り、データベースから条件に当てはまるものをリストボックスで一覧表示させています。
表示させているものは、Worksheetsは顧客情報にある列「顧客名」、「顧客分類」、「状態」の情報です。
Changeを使用しそれぞれに該当するテキストボックスorコンポボックスに入力があると、リストボックスに表示される仕組みなのですが、「顧客分類」にある”販売済"だけを省いて表示するような仕組みができないかと、チェックボックスを作ってやってみたのですができません。
どなたかご教授よろしくお願いいたします。
◆◆全体コード
Option Explicit
Private Sub TextBox1_Change()
Call SetListBox
End Sub
Private Sub UserForm_Initialize()
rtnNo = 0
Call SetBunruiList
Call SetListBox
End Sub
'ここを追加
Private Sub CheckBox1_Click()
Dim i As Long
If Me.CheckBox1.Value = True Then
With Me.lst顧客リスト
For i = .ListCount To 1 Step -1
If .Cells(.Range("顧客分類列")) = "販売済" Then
.RemoveItem (i - 1)
End If
Next
End With
End If
End Sub
'ここまで追加
Private Sub SetBunruiList()
Dim wRow As Long
Me.cmb顧客分類.Clear
For wRow = 3 To Worksheets("顧客分類").Range("A1").CurrentRegion.Rows.Count
Me.cmb顧客分類.AddItem Worksheets("顧客分類").Cells(wRow, 1)
Next
End Sub
Private Sub txt顧客名_Change()
Call SetListBox
End Sub
Private Sub cmb顧客分類_Change()
Call SetListBox
End Sub
Private Sub lst顧客リスト_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
rtnNo = Me.lst顧客リスト.Text
Unload Me
End Sub
Private Sub SetListBox()
Dim wRow As Long
Dim wLstRow As Long
Dim wHitFlg As Boolean
Me.lst顧客リスト.Clear
wLstRow = 0
With Worksheets("顧客情報")
For wRow = 2 To .Range("A1").CurrentRegion.Rows.Count
wHitFlg = True
If Me.txt顧客名 <> "" Then
If InStr(1, .Cells(wRow, .Range("顧客名列").Column), Me.txt顧客名, vbTextCompare) = 0 Then
wHitFlg = False
End If
End If
If Me.cmb顧客分類 <> "" Then
If .Cells(wRow, .Range("顧客分類列").Column) <> Me.cmb顧客分類 Then
wHitFlg = False
End If
End If
If Me.TextBox1 <> "" Then
If InStr(1, .Cells(wRow, .Range("状態列").Column), Me.TextBox1, vbTextCompare) = 0 Then
wHitFlg = False
End If
End If
If wHitFlg = True Then
Me.lst顧客リスト.AddItem ""
Me.lst顧客リスト.List(wLstRow, 0) = wRow
Me.lst顧客リスト.List(wLstRow, 1) = Worksheets("顧客情報").Cells(wRow, 2)
Me.lst顧客リスト.List(wLstRow, 2) = Worksheets("顧客情報").Cells(wRow, 3)
Me.lst顧客リスト.List(wLstRow, 3) = Worksheets("顧客情報").Cells(wRow, 8)
wLstRow = wLstRow + 1
End If
Next
End With
'ここを追加
Dim i As Long
If Me.CheckBox1.Value = True Then
With Me.cmb顧客分類
For i = .ListCount To 1 Step -1
If .List(i - 1, 2) = "販売済" Then
.RemoveItem (i - 1)
End If
Next
End With
End If
'ここまでついか
件数 = lst顧客リスト.ListCount
End Sub
◆◆やったこと
'Private Sub CheckBox1_Click()
に以下構文を追加
Dim i As Long
If Me.CheckBox1.Value = True Then
With Me.lst顧客リスト
For i = .ListCount To 1 Step -1
If .Cells(.Range("顧客分類列")) = "販売済" Then
.RemoveItem (i - 1)
End If
Next
End With
End If
End Sub
'Private Sub SetListBox()に以下構文を追加
Dim i As Long
If Me.CheckBox1.Value = True Then
With Me.cmb顧客分類
For i = .ListCount To 1 Step -1
If .List(i - 1, 2) = "販売済" Then
.RemoveItem (i - 1)
End If
Next
End With
End If
|
|