2014-08-29 601 views
1

我有这样的代码在VBA Excel中:VBA宏 - Range类的AdvancedFilter方法失败

Sub MySub() 
Dim sheet 

Application.EnableEvents = False 
Application.ScreenUpdating = False 

'get current sheet name 
sheet = ActiveSheet.Name        

'I have criteria range in hidden sheet 
Set cRng = Sheets("Hide_sheet.").Range("A14:O15") 
With Sheets("MySheet").Range("A44:O144") 
    .AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:= cRng, _ 
    Unique:=False  'in these 2 lines is this error 
End With 

Application.EnableEvents = True 
Application.ScreenUpdating = True 

Sheets(sheet).Select 'return to the sheet where I was 

End Sub 

而且我得到这样的错误:
运行时错误 '1004':
AdvancedFilter Range类失败的方法

我想用这个宏做什么?
我想隐藏所有行,其中第一列的值为零。在标准范围内,我有'<> 0在适当的列。

我也使用数据透视表 - 我有一次1行,另一次超过100.所以这就是为什么我使用另一个表来显示这些行。在我的表格中,所有100行都含有表示隐藏工作表中100行的公式。如果Hide_sheet中的某行为空,则MySheet appopriate行中的值为零。所以我总是有100行的值,只是这些值正在改变。

宏开始时,我改变透视表滤波器:

Private Sub Worksheet_PivotTableUpdate(ByVal Target As PivotTable) 

Call MySub 

End Sub 

我已经seraching在网上有很多,但我还没有找到我的问题的解决方案呢。也许你会帮助我。

===
新信息:
有时候这个宏的作品,有时不...它的工作原理,当我得到这个错误,我点击调试宏,然后在数据透视表停止调试,更换过滤器,然后我可以运行宏没有任何错误。

+0

奇怪......它适用于我。我认为我们将需要更多的细节,如标题等。你确定你至少有2行MySheet范围A44:A55? – 2014-08-29 09:08:06

+0

正常情况下,如果尝试添加过滤器(超出范围),则会出现此类错误,如果您没有范围A44:A144内的数据,则实际上会出现此类错误。检查... – user3514930 2014-08-29 09:21:31

+0

是的,我有表头和一些行或行。查看我的问题更新。 – Monic 2014-08-29 09:48:34

回答

0

我正在寻找类似问题的解决方案,并且发现如果您使用透视表区域内选中的活动单元格运行代码,高级过滤器代码不起作用。只需在之前添加一些行来选择advancedFilter命令之前的任何单元之外的单元格,它应该可以工作