2013-02-08 194 views
0

我有一个Excel VBA项目,用户可以在Sheet 1中选择的文档发送电子邮件。在Sheet 1中有两栏:Column1和Column 2. Column2列出所有文档为超链接,如果用户想要要选择一个文档,他/她在文档的Column1中放置一个“x”。然后用户点击发送按钮发送电子邮件。下面是按钮点击事件的代码:当引发错误如何清除在vba代码中设置的过滤器?

… 
    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

此问答是否回答您的问题? http://stackoverflow.com/questions/14426837/vba-unfilter-range/14428929#14428929 – 2013-02-08 18:22:11

+0

不是。我想显示过滤器按钮。但是我也想给用户一个在sheet1中的选项来清除过滤器。 – GLP 2013-02-08 19:56:39

回答

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