VBA数据透视表筛选器.ClearAllFilters而不替换下面的数据

时间:2019-05-16 14:30:48

标签: excel vba filter pivot-table

我有一个代码可以将数据透视表过滤为不超过31天的日期范围。因为我知道数据透视表的长度,所以我在数据透视表下面还有其他数据和信息可以使用。问题在于数据源的日期范围更大,因此当我使用.ClearAllFilters时,它希望替换下面的所有数据,然后再过滤到正确的范围。

这是我的简单代码:

Set pt = RepSheet.PivotTables("PivotTable1")
    pt.PivotFields("Date").ClearAllFilters
    pt.PivotFields("Date").PivotFilters.Add Type:=xlDateBetween, _
        Value1:=SelectedDate1, Value2:=SelectedDate2

我尝试了下面的代码将所有过滤器都设置为False,而不是清除过滤器,但是在尝试设置过滤器时我得到了一个错误。

With pt.PivotFields("Date")
    For i = 1 To .PivotItems.Count - 1
        .PivotItems(.PivotItems(i).Name).Visible = False
    Next i
End With

有什么建议吗?我真的不想将数据放在数据透视表的顶部。

1 个答案:

答案 0 :(得分:0)

我想出了一个相对简单的解决方法:

  • 在基础表中添加一列,该列将用作虚拟过滤器,例如“ ClearAllFiltersWorkaround”
  • 对其进行填充,使其仅对数据透视表中的一行包含相同的值。我使用公式= IF(A1 = $ A $ 1,“单项标志”,“”),其中pt的行中填充了A列中的项
  • 编辑您的pt数据源(数据透视表分析->更改数据源),并将此新字段添加为数据透视表字段列表中的过滤器
  • 然后,在更新数据透视表时,首先过滤一个行标签
  • 更改/添加/删除数据透视字段,排序/过滤值或您需要执行的任何操作
  • 清除虚拟过滤器
mouseup