用户选择运行时错误1004上的Excel VBA AutoFilter

时间:2016-10-10 14:56:02

标签: excel vba excel-vba

我有一个包含2张(“内容”和“文件夹”)的Excel 2010工作簿。

此工作簿的目的是按供应商或参考编号跟踪不同的工作,前端(内容页面)易于使用,仅包含按钮和搜索框(不是实际上是一个单独的框,但只是用户输入的内容表(以下简称J8)的单元格J8的内容。

按钮将按供应商类型进行过滤(并且工作完全正常),但这是我遇到问题的用户选择。

此宏的代码是:

    Sub Find_Click()
    Dim userSelect As String
    userSelect = "*" & Range("J8") & "*"
    Sheets("Folders").Select
    ActiveSheet.Range("$B$1:$B$5000").AutoFilter Field:=2, Criteria:=userSelect, Operator:=x1And
    End Sub

按下“查找”按钮时,应该读取J8,然后选择“文件夹”表并过滤结果以显示B列中包含J8中文本的每个条目。

这很好用。但是,现在当我尝试使用此宏时,我得到了一个1004运行时错误,其中包含“应用程序定义或对象定义的错误”消息。

有人可以帮忙吗?

编辑:

包含按照以下格式分配的宏的包含按钮:

Sub Button1_Click()
Sheets("Folders").Select
ActiveSheet.Range("$A$1:$A$5000").AutoFilter Field:=1, Criteria1:= _
    "Criteria"
    Set r = Range(Range("A3"), Range("A3").End(xlDown))
j = WorksheetFunction.CountA(r.Cells.SpecialCells(xlCellTypeVisible))
'MsgBox j
If j = 0 Then
    MsgBox "There is currently no work relating to Criteria"
    ActiveSheet.AutoFilterMode = False
    ActiveSheet.Range("A3").Select
    Sheets("Contents").Select
End If
End Sub

还有一个resest按钮,用于清除过滤器并返回到目录表:

Sub Reset_Click()
ActiveSheet.ShowAllData
Sheets("Contents").Select
End Sub

2 个答案:

答案 0 :(得分:0)

通常,您需要激活您将使用AutoFilter范围内的单元格。

此外,当您尝试将AutoFilter与通配符(*?)或数学测试结合使用时,您需要在开头添加=你的标准字符串,所以

userSelect = "=*" & Range("J8") & "*"

然后,如果您使用第二个,则不是Criteria,而是Criteria1Criteria2!因此,在这种情况下,您不需要Operator

最后使用ActiveSheet.Range("$B$1:$B$5000").AutoFilter Field:=2,您要求代码过滤只有一列的范围的第二列!

因此,如果您要对字母B进行过滤,只需将Field:=2更改为Field:=1

以下是工作代码:

Sub Find_Click()
Dim userSelect As String
Dim wS as Worksheet
userSelect = "=*" & Range("J8") & "*"
Set wS = Sheets("Folders")
wS.Activate
wS.Range("B1").Activate
If Not wS.AutoFilterMode Then wS.AutoFilterMode = True
wS.Range("$B$1:$B$5000").AutoFilter Field:=1, Criteria1:=userSelect
End Sub

你在xlAnd中也有一个拼写错误,它是x1And;)

答案 1 :(得分:0)

对于任何有兴趣的人来说,这个问题最终都在排队:

ActiveSheet.Range("$B$1:$B$5000").AutoFilter Field:=2, Criteria1:=userSelect

由于代码只过滤了B列,因此需要将Field值设置为“1”而不是原来的“2”

感谢@ R3uK的宝贵帮助!