Excel 2013 VBA 清除活动过滤器

Excel 2013 VBA clear active filter

我需要在 运行 某个宏之前清除 sheet 中的任何活动过滤器,如果

上有活动过滤器,此行工作正常
If ActiveSheet.AutoFilterMode Then ActiveSheet.ShowAllData

但是,如果没有选择过滤器,它 returns 错误

Runtime error '1004';
ShowAllData method of Worksheet class failed

我从这个问题的答案中得到了那个代码 Excel 2013 VBA Clear All Filters macro

但是这个问题没有解释如果没有过滤器处于活动状态如何忽略该行。

如果当前没有应用活动过滤器,我如何忽略此行?

编辑

例如,所有列标题都已自动过滤,因此如果我的 sheet 被 'Female' 过滤,例如我需要在 运行 宏之前删除该过滤器,但是,如果没有应用任何过滤器,则只是 运行 正常的宏

我由衷地钦佩您针对特定情况进行编程的愿望,但我不得不承认,实现这一目标的最快方法是 On Error Resume Next

On Error Resume Next
ActiveSheet.ShowAllData
On Error GoTo 0

您不必破坏某些东西来检查它是否存在,但在 VBA 中,这有时是最好的办法。就个人而言,我将 On Error Resume Next 排在 SendKeys 作为编程方法的位置。

上述方法不需要您检查 .AutoFilterMode 是否 True.

使用 FilterMode 而不是 AutoFilterMode。我经常处理过滤器,这段代码工作正常。

If ActiveSheet.FilterMode Then
    ActiveSheet.ShowAllData
End If

确保工作表不受保护,因为这也会导致 1004 错误。

我知道这是一个相对较老的 post 并且不太喜欢当死灵法师...但是由于我遇到了同样的问题并尝试了这个线程中的一些选项但没有成功我合并获得工作宏的一些答案..

希望这对外面的人有帮助:)

Sub ResetFilters()
  On Error Resume Next
  For Each wrksheet In ActiveWorkbook.Worksheets
    wrksheet.ShowAllData 'This works for filtered data not in a table
    For Each lstobj In wrksheet.ListObjects
      If lstobj.ShowAutoFilter Then
        lstobj.Range.AutoFilter 'Clear filters from a table
        lstobj.Range.AutoFilter 'Add the filters back to the table
      End If
    Next 'Check next worksheet in the workbook
  Next
End Sub

** 线程可能重复:Excel 2013 VBA Clear All Filters Macro