Excel实战技巧74: 在工作表中创建搜索框来查找数据

您所在的位置:网站首页 excel表格搜索关键字栏颜色怎么设置 Excel实战技巧74: 在工作表中创建搜索框来查找数据

Excel实战技巧74: 在工作表中创建搜索框来查找数据

2024-07-11 15:13| 来源: 网络整理| 查看: 265

本文主要讲解如何创建一个外观漂亮的搜索框,通过它可以筛选数据并显示搜索结果。

如下图1所示,在数据区域上方放置有一个文本框,用来输入要搜索的文本,其名称重命名为“MySearch”;一个用作按钮的矩形形状,点击它开始搜索并显示结果;两个选项按钮窗体控件,用来选择在数据区域的哪列进行搜索。

图1

在VBE中,插入一个标准模块,输入代码:

代码语言:javascript复制Sub SearchData() Dim optButton As OptionButton Dim strButtonName As String Dim wks As Worksheet Dim lngField As Long Dim rngData As Range Dim vSearch As Variant '赋值工作表变量 Set wks = ActiveSheet '取消筛选 On Error Resume Next wks.ShowAllData On Error GoTo 0 '数据区域(包括列标题) Set rngData = wks.Range("B5:F30") '对于表,可使用下面的代码 'Set rngData = wks.ListObjects("表1").Range '获取用户要搜索的文本 vSearch =wks.Shapes("MySearch").TextFrame.Characters.Text '如果搜索框为ActiveX控件,可用下面的代码 'vSearch =wks.OLEObjects("MySearch").Object.Text '如果搜索框为单元格输入,可用下面的代码 'vSearch = wks.Range("A1").Value '遍历选项按钮 For Each optButton In ActiveSheet.OptionButtons If optButton.Value = 1 Then strButtonName = optButton.Text Exit For End If Next optButton '确定筛选字段 On Error GoTo errH lngField = Application.WorksheetFunction.Match(strButtonName,rngData.Rows(1), 0) On Error GoTo 0 '筛选数据 rngData.AutoFilter Field:=lngField, _ Criteria1:="=*" & vSearch& "*", _ Operator:=xlAnd '清除搜索字段 wks.Shapes("MySearch").TextFrame.Characters.Text ="" '如果搜索框为ActiveX控件,可用下面的代码 'wks.OLEObjects("MySearch").Object.Text = "" '如果搜索框为单元格输入,可用下面的代码 'wks.Range("A1").Value ="" Exit Sub errH: MsgBox "在单元格区域" &rngData.Rows(1).Address & _ "中,没有找到列标题["& strButtonName & "]." & _ vbNewLine & "请检查.",vbCritical, "标题名没发现!" End Sub

在代码中,对要搜索的文本使用了通配符,因此可以搜索部分匹配的文本。此外,对数据区域使用了“硬编码”,你可以将其修改为实际的数据区域。代码运行的结果如下图2所示。

图2

我们在上面的基础上再进行扩展,让搜索字段更多一些,如下图3所示,可以搜索含有数字的列。

图3

代码如下:

代码语言:javascript复制Sub SearchDataPlus() Dim optButton As OptionButton Dim strSearch As String Dim strButtonName As String Dim wks As Worksheet Dim lngField As Long Dim rngData As Range Dim vSearch As Variant '赋值工作表变量 Set wks = ActiveSheet '取消筛选 On Error Resume Next wks.ShowAllData On Error GoTo 0 '数据区域(包括列标题) Set rngData = wks.Range("B5:F30") '对于表,可使用下面的代码 'SetrngData = wks.ListObjects("表1").Range '获取用户要搜索的文本 vSearch =wks.Shapes("MySearch").TextFrame.Characters.Text '如果搜索框为ActiveX控件,可用下面的代码 'vSearch =wks.OLEObjects("MySearch").Object.Text '如果搜索框为单元格输入,可用下面的代码 'vSearch = wks.Range("A1").Value '确定用户要搜索文本还是数值 If IsNumeric(vSearch) = True Then strSearch = "=" & vSearch Else strSearch = "=*" &vSearch & "*" End If '遍历选项按钮 For Each optButton InActiveSheet.OptionButtons If optButton.Value = 1 Then strButtonName = optButton.Text Exit For End If Next optButton '确定筛选字段 On Error GoTo errH lngField =Application.WorksheetFunction.Match(strButtonName, rngData.Rows(1), 0) On Error GoTo 0 '筛选数据 rngData.AutoFilter Field:=lngField, _ Criteria1:=strSearch, _ Operator:=xlAnd '清除搜索字段 wks.Shapes("MySearch").TextFrame.Characters.Text ="" '如果搜索框为ActiveX控件,可用下面的代码 'wks.OLEObjects("MySearch").Object.Text = "" '如果搜索框为单元格输入,可用下面的代码 'wks.Range("A1").Value ="" Exit Sub errH: MsgBox "在单元格区域" &rngData.Rows(1).Address & _ "中,没有找到列标题["& strButtonName & "]." & _ vbNewLine & "请检查.",vbCritical, "标题名没发现!" End Sub

在编写好代码后,将宏指定给表示按钮的矩形形状。在形状中单击右键,如下图4所示。

图4

选取“指定宏”命令,在“指定宏”对话框中选择宏名,如下图5所示。

图5

可以在此基础上进一步添加功能,例如,在搜索完成后,我想恢复原先的数据,可以在工作表中再添加一个代表按钮的矩形形状,如下图6所示。

图6

同时,编写下面的代码来链接到该矩形:

代码语言:javascript复制Sub ClearSearch() On Error Resume Next ActiveSheet.ShowAllData On Error GoTo 0 End Sub

至此,功能已全部实现!但细心的朋友可能发现,由于我们使用的是文本框和形状,因此会出现Excel的编辑形状线,特别是输入文本后,单击形状前,都需要在其他单元格中单击一下,才能再单击形状。这可能会带来不便!你可以使用ActiveX控件,或者直接使用单元格,或者使用快捷键来执行宏。在我们编写的代码中,有很多注释掉的代码语句,可供参考。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3