VBA:基于输入框

时间:2018-08-17 15:02:49

标签: excel-vba

我希望在一个脚本中完成以下步骤:

  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

结束子

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

子Find_First()     Dim i1作为整数     昏暗的FindString作为字符串

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:="<>"

结束子

谢谢

1 个答案:

答案 0 :(得分:0)

看起来您真的需要自动过滤器:

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

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

使用Match查找与FindString匹配的列号

i1 = Application.WorksheetFunction.Match(FindString, ws.Range("A1:CZ1"), 0)
rngData.AutoFilter Field:=i1, Criteria1:="<>"