我尝试使用VBA筛选我的数据透视表。禁用“计算,事件,屏幕和数据透视表.ManualUpdarte = True”没有帮助。我使用某些项目的VISIBLE属性。有人知道如何更快地完成这项工作吗?
请找到随附的示例,其中有一个子“ SLOWcode”: https://docs.google.com/file/d/1GjUpkC8-u2s5dOequEp9jp7HSaLvVP_1/edit?usp=docslist_api&filetype=msexcel
非常感谢
答案 0 :(得分:0)
我写了一篇相当广泛的文章,内容是在http://dailydoseofexcel.com/archives/2013/11/14/filtering-pivots-based-on-external-ranges/上快速过滤外部范围的数据点
您将在此处找到广泛的代码以及详尽的讨论。该文章的重点是设置 .visible
状态要比读取时间长。因此,您应该首先检查每个项目的.Visible
属性,然后仅在必要时进行更改。我对您在代码中采用的这种方法所做的有效调整如下:
此方法非常有效,因为它仅在必须时更改PivotItem的.visible状态。很好,因为根据我所链接的文章,这是瓶颈。与我在网上看到的其他使用applicaiton.match来检查PivotItem是否针对变体数组或(远不如)针对原始FilterTerms范围进行检查相比,使用Dictionary(或集合)的一般方法非常有效。在工作表中。
稍后在该Acticle中,我将展示如果使用除码器连接的Pivot副本(带有临时字段的感兴趣字段)以编程方式隐藏除一个PivotItem之外的所有内容,并通过.EnableMultiplePageItems以编程方式隐藏到Page字段中,您将如何从根本上进一步加快速度设置为False。这将迫使原始的PivotField具有相同的过滤器设置-仅可见一项。意味着您不必在要隐藏的其他“切片器”项目上设置。Visible = false
。
答案 1 :(得分:0)
这是使用VBA在数据透视表中仅选择一项的技巧:
ActiveSheet.PivotTables(destTable).PivotFields(mainText).ClearAllFilters
ActiveSheet.PivotTables(destTable).ManualUpdate = True
varFirstItemVisible = mynames(0) ' e.g.: first searched item
With ActiveSheet.PivotTables(helpTable).PivotFields(mainText)
.Orientation = xlPageField
.ClearAllFilters
.EnableMultiplePageItems = False
.CurrentPage = varFirstItemVisible
End With
Set sc = ActiveWorkbook.SlicerCaches.Add(ActiveSheet.PivotTables(helpTable), ActiveSheet.PivotTables(helpTable).PivotFields(mainText))
sc.PivotTables.AddPivotTable ActiveSheet.PivotTables(destTable)
sc.PivotTables.RemovePivotTable ActiveSheet.PivotTables(destTable)
然后循环浏览您想要的物品并使它们可见; D