工作表类的ShowAllData方法失败

我注意到,当有一个自动filter已经打开我的VBA脚本不起作用。 任何想法,为什么这是?

wbk.Activate Set Criteria = Sheets("Sheet1").Cells(i, 1) Set rng = Sheets("Sheet1").Range(Cells(i, 2), Cells(i, 4)) wb.Activate If ActiveSheet.AutoFilterMode Then ActiveSheet.ShowAllData 'remove autofilter, but it crashes on this line Selection.AutoFilter Range("$A$1:$BM$204").AutoFilter Field:=2, Criteria1:=Criteria.Value rng.Copy Range("$BC$2:$BE$204").SpecialCells(xlCellTypeVisible).PasteSpecial 

非常感谢

如果启用AutoFilterMode,则无论实际上是否有应用于特定列的filter,AutoFilterMode都将为True。 发生这种情况时, ActiveSheet.ShowAllData仍然会运行,并引发错误(因为没有实际的过滤)。

我有同样的问题,并得到它的工作

 If (ActiveSheet.AutoFilterMode And ActiveSheet.FilterMode) Or ActiveSheet.FilterMode Then ActiveSheet.ShowAllData End If 

这似乎阻止ShowAllData运行时,没有实际的筛选器应用但启用了AutoFilterMode。

第二个catch Or ActiveSheet.FilterMode应该捕获高级filter

避免这种简单的方法不是使用工作表方法ShowAllData

自动filter具有相同的ShowAllData方法,在启用filter但未设置filter时不会引发错误

If ActiveSheet.AutoFilterMode Then ActiveSheet. AutoFilter .ShowAllData

当您尝试删除没有应用的应用筛选器时,通常会出现ShowAllData method of Worksheet class failed错误ShowAllData method of Worksheet class failed

我不确定如果您试图删除整个AutoFilter ,或只是删除任何应用的filter,但有不同的方法。

要移除应用的filter,请将AutoFilter置于以下位置:

 If ActiveSheet.AutoFilterMode Or ActiveSheet.FilterMode Then ActiveSheet.ShowAllData End If 

上述代码背后的基本原理是testing是否存在自动filter或是否应用了filter(这也将删除高级filter)。

要完全删除AutoFilter

 ActiveSheet.AutoFilterMode = False 

在上述情况下,您只需完全禁用AutoFilter即可。

我刚刚经历了同样的问题。 经过一些反复试验,我发现如果select在我的过滤区的右侧,显示的logging数是零,ShowAllData将会失败

多一点背景可能是相关的。 我有几张纸,每张都有一个filter。 我想在所有表单上设置一些标准filter,因此我使用了一些这样的VBA

 Sheets("Server").Select col = Range("1:1").Find("In Selected SLA").Column ActiveSheet.ListObjects("Srv").Range.AutoFilter Field:=col, Criteria1:="TRUE" 

此代码将调整标题为“In Selected SLA”的列上的filter,并保持所有其他filter不变。 这有一个不幸的副作用,我可以创build一个显示零logging的filter。 单独使用UI是不可能的。

为了避免这种情况,我想在我应用上面的过滤之前重置所有的filter。 我的重置代码看起来像这样

 Sheets("Server").Select If ActiveSheet.FilterMode Then ActiveSheet.ShowAllData 

请注意我没有移动选中的单元格。 如果select是正确的,它不会删除filter,从而让filter代码构build一个零行filter。 代码运行第二次(在零行筛选器上)ShowAllData将失败。

解决方法很简单:在调用ShowAllData之前,在筛选列中移动select

 Application.Goto (Sheets("Server").Range("A1")) If ActiveSheet.FilterMode Then ActiveSheet.ShowAllData 

这是Excel版本14.0.7128.5000(32位)= Office 2010