Excel 2013 VBA清除活动filter

在运行某个macros之前,我需要清除表单中所有有效的filter,如果有一个活动的filter,这条线就很好

If ActiveSheet.AutoFilterMode Then ActiveSheet.ShowAllData 

但是,如果没有selectfilter,则会返回错误

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

我从这个问题的答案中得到了代码Excel 2013 VBA清除所有筛选macros

但是,这个问题并没有解释如何忽略行,如果没有filter是积极的。

如果没有应用当前有效的filter,我该如何忽略这一行?

编辑

例如,所有列标题都被自动过滤,所以如果我的表格被“女性”过滤,例如我需要在运行macros之前删除该filter,但是如果没有应用filter,就照常运行macros

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

 If ActiveSheet.FilterMode Then ActiveSheet.ShowAllData End If 

确保工作表不受保护,因为这也给了1004错误。

我真诚地佩服你对特定情况进行编程的愿望,但是我不得不承认,实现这一目标的最快捷的方法是使用On Error Resume Next

 On Error Resume Next ActiveSheet.ShowAllData On Error GoTo 0 

你不应该打破什么来检查它是否存在,但在VBA中偶尔是最好的方法。 就我个人而言,我排列On Error Resume Next在那里与SendKeys作为一种编程方法。

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

我知道这是一个相对较旧的职位,并不真正喜欢作为一个巫师……但因为我有同样的问题,并试图在这个线程中的一些选项没有成功,我结合了一些答案,以获得工作的macros..

希望这可以帮助别人:)

 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清除全部filtermacros