簡體   English   中英

從所有Excel表VBA中刪除過濾器

[英]Remove filters from ALL Excel Tables VBA

我正在創建一些Excel加載項來為我們的用戶完成一些基本任務。 我們有一個電子表格可提供給我們每個項目的用戶。 他們使用這些電子表格對可配置項進行更改,然后再處理向SQL數據庫的轉換。 當他們完成電子表格時,通常他們會忘記取消隱藏行,列和/或刪除過濾器。 我想創建一個宏,該宏可以運行以取消隱藏每個工作表中的行/列,並清除每個ListObject中的過濾器。 這是我嘗試使用的代碼:

Sub RemoveFiltersUnhide()
    Dim i As Long

    Application.ScreenUpdating = False

    For i = 1 To ThisWorkbook.Worksheets.Count
        ThisWorkbook.Worksheets(i).AutoFilterMode = False
        ThisWorkbook.Worksheets(i).Rows.Hidden = False
        ThisWorkbook.Worksheets(i).Columns.Hidden = False
    Next i

    Application.ScreenUpdating = True
End Sub

該代碼可用於取消隱藏每個工作表上的行/列,但不會清除過濾器。 由於每個提供的工作簿將有所不同,並且將不包含相同的工作表或列表對象,因此我不知道如何遍歷每個表。 有人對我該如何處理有任何想法嗎?


工作的VBA:

Sub RemoveFiltersUnhide()
    Dim ws As Worksheet, lo As ListObject

    Application.ScreenUpdating = False

    For Each ws In ThisWorkbook.Worksheets
        ws.Rows.Hidden = False
        ws.Columns.Hidden = False

        For Each lo In ws.ListObjects
            lo.AutoFilter.ShowAllData
        Next
    Next

    Application.ScreenUpdating = True
End Sub

如果此處提供的語法正確,則以下方法應該起作用。

Dim Sheet As Excel.Worksheet, List As Excel.ListObject

For Each Sheet In ThisWorkbook.Sheets
    For Each List In Sheet.ListObjects
        List.AutoFilter.ShowAllData
    Next
Next

該代碼將是這樣的。

Sub RemoveFiltersUnhide()

Dim i As Long
Dim Ws As Worksheet
Application.ScreenUpdating = False

For Each Ws In Worksheets
    With Ws
        If .FilterMode Then
            .ShowAllData
        End If
        .Rows.Hidden = False
        .Columns.Hidden = False

    End With
Next Ws

Application.ScreenUpdating = True

End Sub

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM