php多个表中查找数据_Excel实战技巧74: 在工作表中创建搜索框来查找数据
學習Excel技術,關注微信公眾號:
excelperfect
本文主要講解如何創建一個外觀漂亮的搜索框,通過它可以篩選數據并顯示搜索結果。
如下圖1所示,在數據區域上方放置有一個文本框,用來輸入要搜索的文本,其名稱重命名為“MySearch”;一個用作按鈕的矩形形狀,點擊它開始搜索并顯示結果;兩個選項按鈕窗體控件,用來選擇在數據區域的哪列進行搜索。
圖1
在VBE中,插入一個標準模塊,輸入代碼:
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
代碼如下:
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
同時,編寫下面的代碼來鏈接到該矩形:
Sub ClearSearch() On Error Resume Next ActiveSheet.ShowAllData On Error GoTo 0End Sub至此,功能已全部實現!但細心的朋友可能發現,由于我們使用的是文本框和形狀,因此會出現Excel的編輯形狀線,特別是輸入文本后,單擊形狀前,都需要在其他單元格中單擊一下,才能再單擊形狀。這可能會帶來不便!你可以使用ActiveX控件,或者直接使用單元格,或者使用快捷鍵來執行宏。在我們編寫的代碼中,有很多注釋掉的代碼語句,可供參考。
總結
以上是生活随笔為你收集整理的php多个表中查找数据_Excel实战技巧74: 在工作表中创建搜索框来查找数据的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java数组有跨类建立对象_必会的 55
- 下一篇: python表格数据的储存和读取_pyt