工作表类的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