前提・実現したいこと
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
'チェックボックスをONでリストボックスから"販売済"を省く
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
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。