如何用vba做出类似百度搜索那样的逐步提示模糊查询下拉列表框? 您所在的位置:网站首页 excel模糊匹配查询 如何用vba做出类似百度搜索那样的逐步提示模糊查询下拉列表框?

如何用vba做出类似百度搜索那样的逐步提示模糊查询下拉列表框?

2024-02-06 14:45| 来源: 网络整理| 查看: 265

如何用vba做出类似百度搜索那样的逐步提示模糊查询下拉列表框? 2019年7月23日 作者:水星Excel 11,836 次浏览 1评论

如下图所示,

当我们在百度搜索框中搜索关键字时,百度搜索框会自动列出含有关键字的搜索历史供下拉选择。

类似地,在excel中,也经常遇到类似的需求。希望在excel单元格中输入关键字后列出所有含有该关键字的相关列表供快速选择。

要实现上述功能,需要解决以下几个问题:

所有的列表项需要集合在数组或者单元格区域中; 在要实现的单元格区域中触发Worksheet_SelectionChange事件; 在Worksheet_SelectionChange事件下可以弹出文本框控件用于输入关键字,每输入一个关键字,可以自动筛选列表项数组在列表框控件中列出筛选的结果数组; 在列表框控件中选择了要输入的列表项后,文本框控件和列表框控件能够隐藏。

其中文本框控件和列表框控件也可以用组合框控件代替。

接下来介绍代码的实现过程。

为了实现上述功能,可以先手动在要实现的工作表中插入一个文本框(默认的名称为TextBox1)和列表框(默认的名称为ListBox1)ActiveX控件,然后在该工作表代码窗口中输入如下的代码:

'定义一个公共的数组变量,用于存放所有列表框项目 Public arr Private Sub Worksheet_SelectionChange(ByVal Target As Range) Dim oSP As Shape '所有列表项数组 arr = Array("张飞", "关羽", "刘备", "赵云", "诸葛亮", "水星", "张苞", "关平", "孙权", "孙坚", "孙策") '只选中一个单元格时触发 If Target.CountLarge = 1 Then '定义触发的单元格行列条件 If Target.Column = 1 And Target.Row > 1 Then '满足条件先显示文本框,隐藏列表框 With Me Set oSP = .Shapes("TextBox1") With oSP .Visible = msoCTrue .Left = Target.Offset(0, 1).Left .Top = Target.Top .Height = Target.Height * 1.5 .Width = Target.Width End With Set oSP = .Shapes("ListBox1") oSP.Visible = msoFalse End With Else '不满足条件就不显示文本框和列表框 With Me Set oSP = .Shapes("TextBox1") oSP.Visible = msoFalse Set oSP = .Shapes("ListBox1") oSP.Visible = msoFalse End With End If Else '不满足条件就不显示文本框和列表框 With Me Set oSP = .Shapes("TextBox1") oSP.Visible = msoFalse Set oSP = .Shapes("ListBox1") oSP.Visible = msoFalse End With End If End Sub Private Sub TextBox1_Change() '读取筛选后的列表框项目数组 Dim sText As String sText = TextBox1.Text arrList = VBA.Filter(arr, sText) With ListBox1 .Clear .List = arrList End With '显示列表框 With Me Set oSP = .Shapes("ListBox1") With oSP .Visible = msoCTrue .Left = TextBox1.Left .Top = TextBox1.Top + TextBox1.Height .Height = TextBox1.Height * 5 .Width = TextBox1.Width End With End With End Sub Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean) '双击列表框中的列表项将内容填入当前活动单元格中,同时隐藏列表框 Dim oRng As Range Set oRng = Excel.ActiveCell oRng.Value = ListBox1.Value ListBox1.Visible = False '清空文本框内容 TextBox1.Text = "" End Sub

运行代码后的效果如下图所示,输入“张”字,会自动列出含有“张”字的所有列表项。

 

其它相关文章推荐:如何在vba中使用图表Chart对象的事件?如何用vba在工作表中创建添加表单控件、窗体控件、 ActiveX控件?如何在vba中使用api函数?如何在vba中使用WithEvents关键字?如何在vba中使用枚举?如何用excel计算方差、标准偏差? 分类 :  EXCEL VBA , VBA , 窗体、控件 标签 :  下拉列表 , 仿百度 , 仿谷歌 , 列表框 , 数据有效性 , 文本框 , 模糊搜索 , 模糊查询        

声明: 本站文章均属原创,未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则视为侵权。如果想要每天都收到本站的技术文章推送,可以微信搜索公众号:水星Excel或者Excel_Office关注。其它事宜请加QQ:1722187970 或微信号:xycgenius 联系。 



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有