2013-02-08 103 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