excel - VBA数据透视表过滤器.ClearAllFilters而不替换下面的数据
问题描述
我有一个代码可以将数据透视表过滤到不超过 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
有什么建议么?我真的不想将数据放在数据透视表的顶部。
解决方案
我想出了一个相当简单的解决方法:
- 向您的基表添加一个列,该列将用作虚拟过滤器,例如“ClearAllFiltersWorkaround”
- 填充它,使其仅包含数据透视表中的一行的相同值。我使用了公式 =IF(A1=$A$1,"Single Item Flag",""),其中我的 pt 行填充了 A 列中的项目
- 编辑您的 pt 数据源(数据透视表分析 --> 更改数据源)并将这个新字段作为过滤器添加到您的数据透视字段列表中
- 然后,在更新数据透视表时,首先过滤一个行标签
- 更改/添加/删除数据透视字段、排序/过滤值或您需要做的任何事情
- 清除你的虚拟过滤器
pt.PivotFields("ClearAllFiltersWorkaround").CurrentPage = "Single Item Flag"
'Filter/Sort fields, add columns, add values
pt.PivotFields("ClearAllFiltersWorkaround").ClearAllFilters
推荐阅读
- jquery - 如何将变量添加到加载的文件
- java - 重定向到angular6中的页面
- python-3.x - 如何改进椭圆曲线分解的代码?
- angular - Angular 6:如何在 Angular 材料表上实现分页和排序
- laravel-5 - 如何从两个模型的关系中调用数据
- python-3.x - 这个错误的原因是什么:“PermissionError: [WinError 5] Access is denied”
- ajax - 这个 ajax 调用的正确相对路径是什么?
- javascript - 即使在服务器和客户端上设置标头后,错误“请求的资源上不存在'Access-Control-Allow-Origin'标头”
- bioinformatics - x86_64-pc-mingw64 编译 hmmer 软件时出错
- javascript - 在其他地方初始化 'mymodule' 后调用 require('mymodule') 是否正确?