使用输入框过滤列的 VBA 代码

使用输入框过滤列的 VBA 代码

我希望根据用户在输入框中输入的代码来过滤列。

我使用了以下代码:

Sub Filter()
'
' Filter Macro
Dim strName As String
strName = InputBox(“What DMA would you like to search for?”)
Selection.AutoFilter
ActiveSheet.Range("$A$1:$AS$355969").AutoFilter Field:=3, Criteria1:="=*" & strName & “ * ”, Operator:=xlAnd
End Sub

但它显示编译错误:

Excel 宏中的语法错误

有人能帮助我吗?

答案1

我假设您想要通配符匹配,因此您不需要在第二个通配符中添加额外的空格。此外,您需要正确的“”,并且关闭 ScreenUpdating 是个好主意。您还可以使用 With 语句来表示您的范围。最好使用明确的工作表名称而不是 Activesheet,以防当前的 Activesheet 不是您期望的那个。

Option Explicit
Public Sub Filter()
    Application.ScreenUpdating = False
    Dim strName As String
    strName = InputBox("What DMA would you like to search for?")
    With ActiveSheet.Range("$A$1:$AS$355969")
        .AutoFilter
        .AutoFilter Field:=3, Criteria1:="*" & strName & "*"
    End With
    Application.ScreenUpdating = True
End Sub

答案2

您可以尝试这个简单的代码来过滤:

Sub InputFilter()
Dim strInput As String
strInput = InputBox("Enter your value to filter on")
Selection.AutoFilter
ActiveSheet.Range("$A$60:$A$65").AutoFilter Field:=1, Criteria1:=strInput
End Sub

注意:记住Field代码中的值是可调整的,如果条件与要过滤的第 2 列匹配,那么它应该是Field:=2

笔记, 根据需要调整单元格引用。

答案3

非常有用的教程。

通过向工作表添加文本框控件可以实现更高级的过滤。

我创建了一个模板,使用 VBA 的 Find 和 AutoFilter 方法根据文本框中搜索的值(字母、数字或其他字符)在工作表上进行过滤。过滤后的单元格列在工作表上,过滤后的单元格数量通过 msgbox 告知用户。

在此处输入图片描述

希望对用户有用。

我使用 VBA find 和 findnext 方法在 do - while 循环中创建了模板:

...
Sheets("Data").Cells.EntireRow.Hidden = False
 
    If Not aCell Is Nothing Then
        Set bCell = aCell
        Range("AN2").Value = aCell.Address(False, False)
        Do
        son = 0
            Set aCell = Range("F4:F" & Range("F" & Rows.Count).End(xlUp).Row).FindNext(After:=aCell)
         If Not aCell Is Nothing Then
           If aCell.Address = bCell.Address Then Exit Do
      son = son + 1
    Range("AN" & Rows.Count).End(xlUp).Offset(son, 0).Value = aCell.Address(False, False)
        Else
                Exit Do
           End If
        Loop
 Label1.Visible = False
    Else
    Label1.Visible = False
    Range("G2").Activate
    MsgBox SearchString & " Not Found", vbCritical, ""
    Exit Sub
    End If
...

所有代码和示例文件源

相关内容