我有一个包含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
答案 0 :(得分:0)
通常,您需要激活您将使用AutoFilter
范围内的单元格。
此外,当您尝试将AutoFilter与通配符(*
或?
)或数学测试结合使用时,您需要在开头添加=
你的标准字符串,所以
userSelect = "=*" & Range("J8") & "*"
然后,如果您使用第二个,则不是Criteria
,而是Criteria1
和Criteria2
!因此,在这种情况下,您不需要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的宝贵帮助!