通过匹配项目中任何位置的string筛选VBAcombobox

在我的Excel表中,我有一个有很多值的combobox。 目前只需inputstring的前几个字母即可跳转到combobox中的项目。 比方说,我有我的combobox中的这些项目。

  • 约翰·史密斯
  • 特德·詹姆斯
  • 菲利普价格
  • 汤姆·哈代
  • 詹姆斯·迪恩
  • Chris Keaking

所以如果我开始inputTe它会过滤到Ted James

但是说我只知道姓和我inputDean ,没有什么可以匹配,因为它只从string的开头search,而不是在string中search。 同样,如果我inputJam它会过滤到James Dean而不是Ted James

有没有一种方法来复制VBA的行为,如Select2插件 ,它可以searchstring中的任何位置并进行相应的过滤?

试试这个解决scheme – 当你input时,下拉菜单显示并更新,只显示部分匹配到combobox中的选项。 它可能需要一些额外的工作,因为当你select了一个有效的select,该列表仍然过滤只有该项目,直到你清除combobox,但它可能会给你你所需要的。

使用以下代码创build一个名为mdlComboBox的模块

 Public colChoices As Collection Public Sub InitCombobox1() Set colChoices = New Collection With colChoices .Add "John Smith" .Add "Ted James" .Add "Phillip Price" .Add "Tom Hardy" .Add "James Dean" .Add "Chris Keaking" End With FilterComboBox1 "" End Sub Public Sub FilterComboBox1(strFilter As String) Sheet1.ComboBox1.Clear For Each strChoice In colChoices If InStr(1, strChoice, strFilter) <> 0 Then Sheet1.ComboBox1.AddItem strChoice End If Next End Sub 

ThisWorkbook模块中,添加以下内容以确保在打开工作簿时填充combobox:

 Public Sub Workbook_Open() InitCombobox1 End Sub 

最后,将一个ComboBox(名为ComboBox1 )添加到Sheet1 ,并将下面的代码添加到Sheet1模块:

 Private Sub ComboBox1_Change() FilterComboBox1 ComboBox1.Value ActiveSheet.Select ComboBox1.DropDown End Sub 

Activesheet.Select行强制combobox从头开始重Activesheet.Select下拉列表,只显示被函数过滤的选项。 在这个解决scheme中,你必须跟踪全局select集合,这是我在一个Collection全局variables中做的,但是在某些情况下,它可能会失去它的价值,所以最好是从一个表格代替。

我试着完全相同的代码,并得到许多崩溃。
我做了一些小的改动,对我来说工作得很好。
我的第一个问题是从一开始就把东西放在combobox上。
我更喜欢初始化ComboBox并使用Sheet1代码中应用的worksheet_activate()来填充它。

 Private Sub worksheet_activate() InitCombobox1 With ComboBox1 .AddItem "John Smith" .AddItem "Ted James" .AddItem "Phillip Price" .AddItem "Tom Hardy" .AddItem "James Dean" .AddItem "Chris Keaking" End With End Sub 

我不知道你们是谁,但是当我select(或打字)任何符合清单的东西时,先前的回答代码并不接受。

为了解决这个问题,我做了一个IF检查我入口处的INDEX。 如果所选项目已经在列表中,请不要清除下拉列表。

 Public Sub FilterComboBox1(strFilter As String) If Sheet1.ComboBox1.ListIndex > -1 Then Else Sheet1.ComboBox1.Clear For Each strchoice In colChoices If InStr(1, strchoice, strFilter) <> 0 Then Sheet1.ComboBox1.AddItem strchoice End If Next End If End Sub 

但还有一些问题需要解决。 我正在使用自动完成function,并且这可以避免在Excel尝试猜测我要查找的项目时进行search。 现在,我按DEL来解决它。 这使得它回到search。