目前我正在使用VBA中的Userform处理数据库。 Userform有一个Combobox,可以从工作表中加载数据。工作表的值将发生变化,这就是我动态创建它的原因。
问题是,组合框很长。例如,如果我想搜索“内燃机”,我将输入“梳子”,它会显示整个输入。到目前为止,这完美地运作。但是你总是需要知道细胞价值的开始。 当我只键入“引擎”时,不会匹配,导致没有其他条目从引擎开始。我只有一个数据库,所以有任何解决方案可以显示,例如“内燃机”只能由输入引擎? 这只是一个简单的例子。数据列表包含许多包含多个单词的单元格。
有谁知道我的问题的解决方案?我会非常感激的! 先感谢您, 柔
答案 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