只有在切片器被过滤的情况下才清除切片器caching

我有一个Excel VBAmacros将切片器设置为由用户确定的某些值。 但是,在这之前,我想清除任何以前的select。 目前我只使用:

For Each cache In ActiveWorkbook.SlicerCaches cache.ClearManualFilter Next cache 

但是,这是非常缓慢的,所以我只想清除filter,如果切片机实际上被过滤。 到目前为止我有:

 Dim cache As SlicerCache Dim RefreshNeeded As Boolean RefreshNeeded = False For Each cache In ActiveWorkbook.SlicerCaches For i = 1 To cache.SlicerCacheLevels.Count If cache.SlicerCacheLevels(i).SlicerItems.Count <> cache.SlicerCacheLevels(i).VisibleSlicerItems.Count Then RefreshNeeded = True End If Next i If RefreshNeeded = True Then cache.ClearManualFilter End If RefreshNeeded = False Next cache 

这会导致运行时错误。

通过临时replacecache.SlicerCacheLevels(i).VisibleSlicerItems.Count与一个数字,我发现这是问题。 Microsoft支持指出.VisibleSlicerItems属性在使用我所在的Cube时不可用。

有没有办法解决这个问题,或者是另外一种技术来只识别被过滤的切片器?