根据文本框值填充多列列表框

问题描述 投票:0回答:1

我使用以下代码已经有一段时间了,它可以完美地根据文本框值过滤列表框(由 Ralph 编写)。

    Private Sub Textbox1_Change()

Dim i As Long
Dim arrList As Variant

Me.ListBox1.Clear
If TMP.Range("A" & TMP.Rows.Count).End(xlUp).Row > 1 And Trim(Me.TextBox1.Value) <> vbNullString Then
    arrList = TMP.Range("A1:A" & TMP.Range("A" & TMP.Rows.Count).End(xlUp).Row).Value2
    For i = LBound(arrList) To UBound(arrList)
        If InStr(1, arrList(i, 1), Trim(Me.TextBox1.Value), vbTextCompare) Then
            Me.ListBox1.AddItem arrList(i, 1)
        End If
    Next i
End If
If Me.ListBox1.ListCount = 1 Then Me.ListBox1.Selected(0) = True

End Sub

我想将它与多列列表框一起使用(准确地说是 4 A->D)。原始帖子(标题为“如何根据文本框值过滤列表框值”)中的提示之一是替换:

Me.ListBox1.AddItem arrList(i, 1)

Me.Listbox.AddItem 
Listbox.List(0, 0) = arrList(i, 1) 
Listbox.List(0, 1) = arrList(i, 2)

但我无法让它发挥作用。我已经被这个问题困扰好几天了,你能帮我让它工作吗?

谢谢你...

vba filter listbox
1个回答
0
投票

这是我对这个主题的看法:

私有子文本框1_Change()

暗淡我只要 变暗 b 只要 变暗 arrList 作为变体

Me.ListBox1.Clear 如果 TMP.Range("A" & TMP.Rows.Count).End(xlUp).Row > 1 且 Trim(Me.TextBox1.Value) <> vbNullString 那么 arrList = TMP.Range("A1:A" & TMP.Range("A" & TMP.Rows.Count).End(xlUp).Row).Value2 对于 i = LBound(arrList) 到 UBound(arrList) 如果 InStr(1, arrList(i, 1), Trim(Me.TextBox1.Value), vbTextCompare) 那么 Me.ListBox1.AddItem listBox1.List(b, 0) = TMP.Cells(i, 1).Value listBox1.List(b, 1) = TMP.Cells(i, 2).Value listBox1.List(b, 2) = TMP.Cells(i, 3).Value listBox1.List(b, 3) = TMP.Cells(i, 4).Value b=b+1 结束如果 接下来我 结束如果 如果 Me.ListBox1.ListCount = 1 则 Me.ListBox1.Selected(0) = True

结束子

我已经检查过了,效果非常好。在这种情况下,您必须将第 i 行单元格中的值添加到列表中,并且由于 i 指定了一行,因此很容易将其链接到单元格值。

© www.soinside.com 2019 - 2024. All rights reserved.