组合框搜索,第二个字符串,在行VBA之间搜索

时间:2016-09-14 02:43:29

标签: string vba search combobox

目前我正在使用VBA中的Userform处理数据库。 Userform有一个Combobox,可以从工作表中加载数据。工作表的值将发生变化,这就是我动态创建它的原因。

问题是,组合框很长。例如,如果我想搜索“内燃机”,我将输入“梳子”,它会显示整个输入。到目前为止,这完美地运作。但是你总是需要知道细胞价值的开始。 当我只键入“引擎”时,不会匹配,导致没有其他条目从引擎开始。我只有一个数据库,所以有任何解决方案可以显示,例如“内燃机”只能由输入引擎? 这只是一个简单的例子。数据列表包含许多包含多个单词的单元格。

有谁知道我的问题的解决方案?我会非常感激的! 先感谢您, 柔

1 个答案:

答案 0 :(得分:0)

假设组合框以“ComboBox1”命名,您可以在userform代码窗格中尝试以下代码

Private Sub ComboBox1_Change()
    Dim i As Long
    Static found As Boolean '<--| this will be used as this sub "footprint" and avoid its recursive and useless calls 

    If found Then '<-- we're here just after the text update made by the sub itself, so we must do nothing but erase our "footprint" and have this sub run at the next user combobox change
        found = False '<--| erase our "footprint"
        Exit Sub '<--| exit sub
    End If

    With Me.ComboBox1 '<--| reference userform combobox
        If .Text = "" Then Exit Sub '<--| exit if no text has been typed in
        For i = 0 To .ListCount - 1 '<--|loop through its list
            If InStr(.List(i), .Text) > 0 Then '<--| if current list value contains typed in text...
                found = True '<--| leave our "footprint"
                .Text = .List(i) '<--| change text to the current list value. this will trigger this sub again but our "footprint" will make it exit 
                Exit For '<--| exit loop
            End If
        Next i
    End With
End Sub