Excel VBA提供了许多控件,同时也可以自定义控件,控件中有些功能已经可以完成大部分操作,本文介绍一个十分实用的功能属性。
如何,在下拉列表中自动筛选出想要的选项?
下拉列表框是一个应用很普遍的控件,任意语言都会用到这样的模式。
在实际应用场景当中,会遇到相似或部分相同内容的选项,在选择这些项目的时候,如果自动把需要的内容提取出来那么就会提高操作效率。
依据实际要求,VBA给出的ComboBox控件和ListBox控件一个属性MatchEntry可以实现这样的功能。
语法如下图所示:
语法:
ComboBoxObject.MatchEntry [= fmMatchEntry ]
其中ComboBoxObject是一个对象,是ComboBox或者ListBox对象。
fmMatchEntry 的设置为: | ||
常量 | 值 | 说明 |
fmMatchEntryFirstLetter | 0 | 基本匹配。 控件搜索输入的字符开头的下一个项。 重复键入同一字母将循环显示该字母开头的所有项。 |
FmMatchEntryComplete | 1 | 扩展匹配。 在键入每个字符时,控件将搜索与输入的所有字符匹配的项(默认)。 |
FmMatchEntryNone | 2 | 无匹配。 |
上述值可以区别,如何对下拉列表值进行搜索。
当值为0,则重复搜索相同字母,也就是把开头为第一个输入值的项目循环搜索出来。
当值为1,可以输入多个字母以匹配相应的项目。
值为2,不做匹配搜索。
重点:
其搜索结果有一个默认事件。
当搜索到相应匹配结果的时候,会触发控件的Click事件。
这一点才是其根本应用的关键,也就是说当我样输入一个字符,匹配到相应列表项之后,自动把列表值设定的匹配项,然后触发Click事件。
当然了,Click事件可以编写我们想要处理的过程或函数。
这就是MatchEntry属性的功能所在。
注意:
还有一些相应的属性需要配合设置,不然MatchEntry还是不能够正确的达到我们的目的。
控件将搜索与由用户键入的项匹配的项的 TextColumn 所标识的列。 在找到一个匹配项时,将选择包含该匹配项的行,显示列的内容,并且其 BoundColumn 属性的内容将变为控件的值。 如果匹配是明确的,则查找匹配将启动 Click 事件。
要设置TextColumn属性,表示在列表控件的哪一列进行匹配搜索。
BoundColumn属性同样也要设置正确,表示匹配之后显示到控件里的内容是列表的哪一列。
这两个属性设置错误,那么将不会看到想要的结果。
代码
Private Sub UserForm_Activate() With Me.ComboBox1 .List = Array("12345", "this is a list", "昨夜西风雕碧树", "126", "288", "168") .MatchEntry = fmMatchEntryComplete'扩展匹配 .TextColumn = 1 .BoundColumn = 1 End With With Me.ComboBox2 .List = Me.ComboBox1.List .MatchEntry = fmMatchEntryFirstLetter'基本匹配 .TextColumn = 1 .BoundColumn = 1 End With End Sub
MatchEntry属性本身有默认属性,所以初学者不会考虑太多,对于要掌握更深层次的内容,学会精确编写各类应用功能的需求,还是要从各控件的细节进行研究为好。
欢迎关注、收藏
---END---