我正在尝试在您键入时创建一个自动过滤的搜索框。我已经使用了各种教程,但我很难让它正常工作。
我使用的代码是:
Private Sub SearchField_Change()
If Len(SearchField.Value) = 0 Then
Sheet1.AutoFilterMode = False
Else
If Sheet1.AutoFilterMode = True Then
Sheet1.AutoFilterMode = False
End If
Sheet1.Range ("A:A" & Rows.Count) .AutoFilter _ Field:= 1, Criteria1:="*" & SearchField.Value & "*"
End If
End Sub
当我尝试使用它时,我收到一个语法错误,我发现令人困惑的是我正在复制教程中的内容(根据需要更改工作表名称/文本框名称)但没有成功。
答案 0 :(得分:1)
您需要正确指定过滤器范围。正在过滤的范围中的第一个单元格应该是您的标题。因此,如果headers
位于Row 2
,请尝试这样......
Sheet1.Range("A2:A" & Rows.Count).AutoFilter Field:=1, Criteria1:="*" & SearchField.Value & "*"
答案 1 :(得分:0)
缺陷在于:
Range("A:A" & Rows.Count)
哪个会尝试引用一些“A:A1000000”范围,这显然是一个错误
然后你要使用:
Range("A1:A" & Rows.Count)
或者,这是相同的:
Range("A:A")
但是我不会引用整个列并将范围限制为实际“使用过的”
所以你可以试试这个代码的重构:
Private Sub SearchField_Change()
With Sheet1
.AutoFilterMode = False
If Len(SearchField.Value) = 0 Then Exit Sub
.Range("A1", .Cells(.Rows.Count,1).End(xlUp)).AutoFilter Field:= 1, Criteria1:="*" & SearchField.Value & "*"
End With
End Sub