如果功能 - 如果没有,不要做任何事情

时间:2017-07-13 15:04:04

标签: excel-vba if-statement runtime-error vba excel

我有以下代码来删除工作表上应用的所有过滤器而不删除过滤器功能。

If ActiveSheet.AutoFilterMode Then ActiveSheet.ShowAllData

如果应用了过滤器,这可以很好地工作,但有时不会应用过滤器,我将不得不运行此错误。错误代码是1004并且是 - '工作表类的ShowAllData方法失败'。

我怎样才能做到这一点,所以如果没有过滤器,就不会发生错误。

由于

2 个答案:

答案 0 :(得分:2)

ActiveSheet.ShowAllData 不会删除当前过滤器(如果有)。它只是“显示数据”,但过滤器仍然存在,以便您最终可以使用ActiveSheet.AutoFilter.ApplyFilter再次应用它。

因此,如果您使用未删除的现有过滤器两次致电ShowAllData,则会出错。

如果您想明确删除过滤器,或者只是确保没有过滤器,请更好地使用它:

ActiveSheet.AutoFilterMode = False

这绝不会出错,无论是否有过滤器。因此,如果有任何,这就是清除前一个过滤器的方法。顺便说一下,它不需要任何检查。

答案 1 :(得分:1)

仅使用If ActiveSheet.AutoFilterMode Then ActiveSheet.ShowAllData替换您的第ClearTheFilter行。

然后在当前程序(即行end subend function之后)输入: -

Private Sub ClearTheFilter()
On error goto ErrorHandle
If ActiveSheet.AutoFilterMode Then ActiveSheet.ShowAllData
ErrorHandle:
Err.Clear
End sub

这样做是隔离可能出错的行,然后在错误发生时处理/清除错误。