如何清除vba代码中设置的过滤器?

时间:2013-02-08 17:15:58

标签: excel-vba filter vba excel

我有一个Excel VBA项目,用于发送用户在工作表1中选择的文档的电子邮件。在工作表1中有两列:Column1和Column 2. Column2将所有文档列为超链接,如果是用户想要选择一个文档,他/她在Column1中为文档放置一个“x”。然后,用户单击“发送”按钮以发送电子邮件。以下是按钮点击事件的代码:

…
    Set Ash = ActiveSheet
    On Error GoTo cleanup

            Ash.Range("A5:B500").AutoFilter Field:=1, Criteria1:="x"

            For Each cell In Ash.Range("B5:B300").SpecialCells(xlCellTypeVisible)
                If cell.Offset(0, -1).Value = "x" Then
                    …
                End If
            Next
…
cleanup:
    Set OutApp = Nothing
    With Application
        .EnableEvents = True
        .ScreenUpdating = True
    End With
 …

出现错误时出现问题。用户单击“发送”按钮后,如果发生错误,Sheet1仅选择了这些文档,并且所有其他文档都已过滤掉。并且在每列的顶部都有一个过滤器按钮,这很好,因为我确实希望用户知道出错的地方。

我的问题是我无法更改过滤器设置或退出过滤器。我必须关闭Excel然后重新打开它。有没有什么方法可以通过单击Column1顶部的过滤器按钮清除过滤器并将所有其他文件带回来?

1 个答案:

答案 0 :(得分:0)

这样的东西?

Sub ToggleAutofilter()
    ' check if autofilter is currently off
    If ActiveSheet.FilterMode = False Then
        ' if it's off, turn it on, and filter on "Nick"
        Range("d5").AutoFilter Field:=1, Criteria1:="Nick"
    Else
        ' if it's on, turn it off
        Range("d5").AutoFilter
    End If
End Sub

请参阅此link