基于工作表过滤器更新数据透视表的源数据

时间:2018-08-13 13:30:49

标签: excel vba excel-vba pivot-table

在对列进行过滤后,我最终得到4行而不是105行,但是我的代码仍然看到105行,我如何在应用过滤器时自动刷新数据透视表。我将过滤我的工作表很多次,所以我希望我的数据透视表适应我的过滤条件(不想将过滤器直接应用于数据透视表,而是要使过程自动化)

Filtered items

LastRow = alarmes.Cells(Rows.Count, 1).End(xlUp).Row
LastCol = 11
Set PRange = alarmes.Cells(1, 1).Resize(LastRow, LastCol)

Set PCache = Application.ThisWorkbook.PivotCaches.Create _
    (SourceType:=xlDatabase, SourceData:=PRange)
Set PTable = PCache.CreatePivotTable _
    (TableDestination:=graphe_dos.Cells(1, 1), TableName:="Test")

1 个答案:

答案 0 :(得分:0)

您不能从非连续范围创建数据透视表。筛选数据透视表的源数据对数据透视表没有影响。因此,您需要删除源表中的隐藏行,然后使用剩余的整个表块,或筛选数据透视表本身中的数据透视表项。

如果要过滤PivotField以匹配Table中的项目,则需要遍历PivotItems(如果有Slicer连接到PivotField,则遍历SlicerItems)并设置.Visible(或.Selected for SlicerItems) )则将您要保留的内容设为TRUE,将其他项设为FALSE。

执行此操作时有许多潜在的瓶颈,如果您不编写代码,则可能需要几分钟才能遍历仅包含20,000个PivotItems的PivotField。有关需要注意的事项,请参见我在http://dailydoseofexcel.com/archives/2013/11/14/filtering-pivots-based-on-external-ranges/上的帖子,然后在围绕这些瓶颈进行编程的以下链接中查看我的答案:

Filtering on SlicerItems

Filtering on PivotItems

也许一个简单的解决方法是设置数据透视表切片器,并使用用户在该数据透视表切片器中选择的值对表进行筛选以使用相同的值。参见How to link a Table and a Pivot Table using Slicers in Excel?