我希望根据用户在输入框中输入的代码来过滤列。
我使用了以下代码:
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
...