vba - VBA Pivot 过滤器在每个过滤器项上重新计算表 - 如何避免这种情况?
问题描述
我有一个 Excel 电子表格,其中有一个更大的数据透视表。该表必须能够使用帐号列表上的宏进行过滤。我尝试以 2 种不同的方式进行过滤(两种方式都有效,但速度很慢),因此只有一定数量的帐户被设置为“可见”。我试图在工作表中创建一个列表并为其提供一个动态命名范围,然后将其过滤掉(方法#1)。
我还尝试直接在我的代码中制作硬编码的数组(方法#2),但两者都有非常烦人的功能,即为每个数组/列表项重新计算数据透视表 - 并且有 +50 项。有没有办法同时设置这些过滤器,然后进行一次重新计算?
我尝试了以下 2 个宏:
方法#1:
Sub Test ()
Dim PI As PivotItem
With Worksheets ("Debt"). PivotTables ("pivottabel1"). PivotFields ("GL_AccNo")
.ClearAllFilters
For Each PI In .PivotItems
PI.Visible = WorksheetFunction.CountIf (Range ("Debt AccountsRange"), PI.Name)> 0
Next PI
End With
End Sub
在此,另一个工作表中的命名范围被称为
方法#2:
Private Sub PivotFilterTest ()
Dim pf As PivotField
Dim myArray () As Variant
Dim and As Long
myArray = Array ("42270", "62515", "62520", "72110", "72120", "72140", "72150", "72180", "72181", "72185", "72210", "72220 "," 72230 "," 72250 "," 72260 "," 72270 "," 72275 "," 72280 "," 72285 "," 72310 "," 72315 "," 72320 "," 72330 "," 72340 ", "73110", "73120", "73121", "73125", "73130", "73131", "73133", "73134", "73140", "73150", "73155", "73160", "73610 "," 73615 "," 73620 "," 73625 "," 73630 "," 73635 "," 73640 "," 73645 "," 73650 "," 73655 "," 76210 "," 76220 "," 76230 ", "76235", "76240", "76250", "76260", "76265", "76989")
Set pf = Worksheets ("Debt"). PivotTables ("pivottabel1"). PivotFields ("GL_AccNo")
With pf
.ClearManualFilter
.EnableMultiplePageItems = True
For i = LBound (myArray) To UBound (myArray)
.PivotItems (myArray (i)). Visible = True
Next i
End With
End Sub
在这里,帐号被直接编码到一个数组中。
有谁知道如何在重新计算之前设置过滤器?
解决方案
推荐阅读
- c# - 以编程方式将事件发布到 Outlook 日历 c# ASP.NET
- java - Firebase Recycler 查看重复数据
- php - 如何在 PHP 中获取每月的周数?
- java - 如何只允许一定数量的io异常?
- python - 慢功能动画脚本
- oracle11g - oracle DB 11g 中的数据库表分区
- aws-lambda - AWS AppSync 使用存在检查解析器将多个子项添加到一个父属性中
- numpy - NumPy 广播是关联的吗?
- typescript - 覆盖抽象方法 TypeScript?
- android - Flutter:如何使用 DropDownMenuItems 导航到新屏幕