簡體   English   中英

Excel 搜索欄上的宏復雜問題 Function

[英]Excel Macro Complex Question on Search Bar Function

我的特定 Excel 文件

您好,我擁有所有正確的按鈕並設置了我認為可以讓我的 excel 工作表可搜索的內容。 我認為在 VBA 上的選擇器值(例如我的范圍)上的代碼中存在錯誤。 雖然我選擇了 A6 到 Y1000 的范圍,而且我的搜索框是 C3,但這不應該運行嗎?

設置說我的單選按鈕需要與列名完全相同,因此名稱很奇怪。 我會做一個根本沒有單選按鈕的搜索欄,只搜索工作表上匹配的任何內容,但這似乎太高級了。

有誰知道我的代碼中的具體內容在這樣的設置電子表格上運行是不正確的嗎? 在此處輸入圖像描述

    Sub SearchBox()
    'PURPOSE: Filter Data on User-Determined Column & Text
    'SOURCE: www.TheSpreadsheetGuru.com

    Dim myButton As OptionButton
    Dim MyVal As Long
    Dim ButtonName As String
    Dim sht As Worksheet
    Dim myField As Long
    Dim DataRange As Range
    Dim mySearch As Variant
      
    'Load Sheet into A Variable
      Set sht = ActiveSheet

    'Unfilter Data (if necessary)
      On Error Resume Next
        sht.ShowAllData
      On Error GoTo 0
      
    'Filtered Data Range (include column heading cells)
      Set DataRange = sht.Range("A6:Y1000") 'Cell Range
      'Set DataRange = sht.ListObjects("Sheet1").Range 'Table

    'Retrieve User's Search Input
      mySearch = sht.Shapes("UserSearch").TextFrame.Characters.Text 'Control Form
      'mySearch = sht.OLEObjects("UserSearch").Object.Text 'ActiveX Control
      'mySearch = sht.Range("A1").Value 'Cell Input

    'Loop Through Option Buttons
      For Each myButton In ActiveSheet.OptionButtons
          If myButton.Value = 1 Then
            ButtonName = myButton.Text
            Exit For
          End If
      Next myButton
      
    'Determine Filter Field
      On Error GoTo HeadingNotFound
        myField = Application.WorksheetFunction.Match(ButtonName, DataRange.Rows(1), 0)
      On Error GoTo 0
      
    'Filter Data
      DataRange.AutoFilter _
        Field:=myField, _
        Criteria1:="=*" & mySearch & "*", _
        Operator:=xlAnd
      
    'Clear Search Field
      sht.Shapes("UserSearch").TextFrame.Characters.Text = "" 'Control Form
      'sht.OLEObjects("UserSearch").Object.Text = "" 'ActiveX Control
      'sht.Range("A6").Value = "" 'Cell Input

    Exit Sub

    'ERROR HANDLERS
    HeadingNotFound:
      MsgBox "The column heading [" & ButtonName & "] was not found in cells " & DataRange.Rows(1).Address & ". " & _
        vbNewLine & "Please check for possible typos.", vbCritical, "Header Name Not Found!"
        
    End Sub

我要么什么都沒有發生,要么得到一個像這樣的錯誤代碼: 在此處輸入圖像描述

關於我從哪里獲得大部分 VBA 代碼的參考

您需要用 ActiveX 文本框替換您的文本字段

在此處輸入圖像描述

如果像這樣訪問:

Sheets("Feuil1").TextBox1.Text = ""

您也需要替換您的搜索行:

mySearch = Sheets("Feuil1").TextBox1.Text

我已經更新了您的代碼,只是不要忘記更新您的工作表名稱

Sub SearchBox()
    'PURPOSE: Filter Data on User-Determined Column & Text
    'SOURCE: www.TheSpreadsheetGuru.com

    Dim myButton As OptionButton
    Dim MyVal As Long
    Dim ButtonName As String
    Dim sht As Worksheet
    Dim myField As Long
    Dim DataRange As Range
    Dim mySearch As Variant
      
    'Load Sheet into A Variable
      Set sht = ActiveSheet

    'Unfilter Data (if necessary)
      On Error Resume Next
        sht.ShowAllData
      On Error GoTo 0
      
    'Filtered Data Range (include column heading cells)
      Set DataRange = sht.Range("A6:Y1000") 'Cell Range
      'Set DataRange = sht.ListObjects("Sheet1").Range 'Table

    'Retrieve User's Search Input
      mySearch = Sheets("Feuil1").TextBox1.Text 'Control Form
      'mySearch = sht.OLEObjects("UserSearch").Object.Text 'ActiveX Control
      'mySearch = sht.Range("A1").Value 'Cell Input

    'Loop Through Option Buttons
      For Each myButton In ActiveSheet.OptionButtons
          If myButton.Value = 1 Then
            ButtonName = myButton.Text
            Exit For
          End If
      Next myButton
      
    'Determine Filter Field
      On Error GoTo HeadingNotFound
        myField = Application.WorksheetFunction.Match(ButtonName, DataRange.Rows(1), 0)
      On Error GoTo 0
      
    'Filter Data
      DataRange.AutoFilter _
        Field:=myField, _
        Criteria1:="=*" & mySearch & "*", _
        Operator:=xlAnd
      
    'Clear Search Field
      Sheets("Feuil1").TextBox1.Text = "" 'Control Form
      'sht.OLEObjects("UserSearch").Object.Text = "" 'ActiveX Control
      'sht.Range("A6").Value = "" 'Cell Input

    Exit Sub

    'ERROR HANDLERS
HeadingNotFound:
      MsgBox "The column heading [" & ButtonName & "] was not found in cells " & DataRange.Rows(1).Address & ". " & _
        vbNewLine & "Please check for possible typos.", vbCritical, "Header Name Not Found!"
        
End Sub

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM