【发布时间】:2019-10-03 20:57:18
【问题描述】:
我有一个代码可以将数据透视表过滤到不超过 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
有什么建议吗?我真的不想将数据放在数据透视表的顶部。
【问题讨论】:
-
当您尝试一次删除一个手动过滤器项目时出现错误的原因是您无法将过滤器设置为根本不显示任何项目。
-
我在
With语句中添加了这一行.PivotItems(SelectedDate1).Visible = True,但仍然出现同样的错误,它在列表中被选中但没有出现在表格中,我需要刷新吗? @GregViers -
我以前遇到过类似的挑战,我有一个令牌项目,我总是打开然后关闭所有其他项目作为设置过滤器的一种方式。
-
另一种完全不同的方法是创建一个“数据透视表沟”。基本上,在表格下方插入 1000 条空行,然后隐藏它们。这样,当您 ClearAllFilters 时,它不会覆盖您下面的数据,它只会流入沟渠。
-
对于数据透视表,我通常有一些要比较的标准,并且在 if 语句中我有一个变量,如 switch,这样 z = 0 除非某些东西符合标准并且 z = 1。 .. 所以当你到达最后一项时
if i = pivotitems.count and z = 0 then .visible = true。这可确保至少 1 个过滤器应用于数据,即使前一个过滤器已关闭。
标签: excel vba filter pivot-table