【问题标题】:Filter Only matching results in ListBox Excel from TextBox text仅从 TextBox 文本中过滤 ListBox Excel 中的匹配结果
【发布时间】:2018-02-24 02:38:57
【问题描述】:

我有一个带有文本框和列表框的用户表单。我希望用户能够在文本框中输入文本,并让列表框根据他们的输入过滤结果。

到目前为止,我已经设法让 ListBox 突出显示列表中的匹配结果,但没有过滤掉不匹配的结果。我还遇到了我的代码无法识别多个匹配记录的问题,不确定我需要添加什么才能实现这一点。

Private Sub TextBox3_Change()
        'searches ListBox3 for match and hightlights result. Need to filter results.
    Dim i As Long
    Dim sFind As String

    sFind = Me.TextBox3.Text

    If Len(sFind) = 0 Then
        Me.ListBox3.ListIndex = -1
        Me.ListBox3.TopIndex = 0
    Else
        For i = 0 To Me.ListBox3.ListCount - 1
            If UCase(Left(Me.ListBox3.List(i), Len(sFind))) = UCase(sFind) Then
                Me.ListBox3.TopIndex = i
                Me.ListBox3.ListIndex = i
                Exit For
            End If
        Next i
    End If
End Sub

【问题讨论】:

  • 您的问题和代码都没有表明您是否要允许在列表框中进行多项选择或何时清除以前的选择。我还想知道为什么您要在文本框中输入选择,而不是让用户通过单击列表框来选择它们。
  • 因此我的问题是,如何允许在结果中进行多项选择?我希望列表框作为一种搜索工具,用于它所附加的行源。因此,当用户在文本框中输入内容时,只有匹配的结果才会出现在列表中
  • 为了允许在 ListBox 中进行多项选择,其MultiSelect 属性必须设置为frmMultiSelectMultifrmMultiSelectExtended。但是,我不明白你的工作流程。您的意思是在 TextBox 中多次输入单词并将每个单词添加到 ListBox 中的选择中吗?如果是这样,为什么不使用链接到同一个 RowSource 的 ComboBox 而不是 TextBox?您打算如何取消选择 ListBox 中的一项或全部?
  • 我不想在列表框中添加任何内容,我只想让列表框过滤它在用户表单中返回的内容,以匹配输入到文本框中的内容。我确实尝试过链接 frmMultiSelect 属性,但没有成功。

标签: vba excel


【解决方案1】:

尝试使用退出 textbox3 时有效的代码,否则在输入时会进行一些过滤并可能带来错误。

如果匹配准确

Private Sub TextBox3_Exit(ByVal Cancel As MSForms.ReturnBoolean)
For i = ListBox1.ListCount - 1 To 0 Step -1
    If Not ListBox1.List(i) = TextBox3 Then ListBox1.RemoveItem (i)
Next i
End Sub

并且循环使用递归循环,否则会出现错误。

对于部分匹配

Private Sub TextBox3_Exit(ByVal Cancel As MSForms.ReturnBoolean)
For i = ListBox1.ListCount - 1 To 0 Step -1
    If InStr(1, ListBox1.List(i), TextBox3) = 0 Then ListBox1.RemoveItem (i)
Next i
End Sub

Found a better code to filter a listbox.

【讨论】:

    猜你喜欢
    • 2011-10-28
    • 1970-01-01
    • 2016-10-11
    • 2012-04-16
    • 1970-01-01
    • 1970-01-01
    • 2012-02-22
    • 2011-01-15
    • 1970-01-01
    相关资源
    最近更新 更多