基于InputBox条目的搜索和过滤器

问题描述 投票:-1回答:1

我希望实现以下目标:

  1. 通过输入框进行用户输入。
  2. 在表标题中搜索该文本。
  3. 过滤找到的列以删除所有空白单元格(仅保留包含数据的单元格。]

我对找到的脚本进行了一些改进,以提供输入框,搜索表标题并选择找到的单元格。

我需要将过滤找到的单元格的列的步骤合并到此。如果我记录这些步骤,无论我搜索什么内容,它都会过滤同一列,因此我认为我需要一种方法来回读找到的单元格详细信息并选择该列以过滤出空白。

Sub Find_First()

    Dim FindString As String
    Dim Rng As Range
    FindString = Application.InputBox("Enter a Search value")
    If Trim(FindString) <> "" Then
        With Sheets("ACM").Range("B2:DA2") ' This is the table headers
            Set Rng = .Find(What:=FindString, _
                            After:=.Cells(.Cells.Count), _
                            LookIn:=xlValues, _
                            LookAt:=xlWhole, _
                            SearchOrder:=xlByRows, _
                            SearchDirection:=xlNext, _
                            MatchCase:=False)
            If Not Rng Is Nothing Then
                Application.Goto Rng, True
            Else
                MsgBox "Nothing found"
            End If
        End With
    End If
End Sub

我现在使用下面的代码运行它,如果取消输入框,我现在唯一的错误是1004(WorksheetFunction类)错误:-

Sub Find_First()
    Dim i1 As Integer
    Dim FindString As String

    Dim Rng As Range
    Dim rngData As Range
    Set rngData = Application.Range("A2").CurrentRegion
        FindString = Application.InputBox("Enter a Search value")
        If Trim(FindString) <> "" Then
            With Sheets("ACM").Range("B2:DA2") ' This is the table headers
                Set Rng = .Find(What:=FindString, _
                            After:=.Cells(.Cells.Count), _
                            LookIn:=xlValues, _
                            LookAt:=xlPart, _
                            SearchOrder:=xlByRows, _
                            SearchDirection:=xlNext, _
                            MatchCase:=False)
                If Not Rng Is Nothing Then
                    Application.Goto Rng, True
                Else
                    MsgBox "Nothing found"
                End If
            End With
        End If

    i1 = Application.WorksheetFunction.Match(FindString, Application.Range("A2:CZ2"), 0)
    Rng.AutoFilter Field:=i1, Criteria1:="<>"

End Sub
excel vba
1个回答
0
投票

看起来您确实需要自动过滤器解决:

我在类似的情况下也这样做:

Dim i1 as Interger
Dim rngData as Range
Set rngData = ws.Range("A1").CurrentRegion

使用匹配找到与查找字符串匹配的我的列号

i1 = Application.WorksheetFunction.Match(FindString, ws.Range("A1:CZ1"), 0)
rngData.AutoFilter Field:=i1, Criteria1:="<>"
© www.soinside.com 2019 - 2024. All rights reserved.