【发布时间】:2019-01-20 06:09:34
【问题描述】:
过滤一列后,我最终得到 4 行而不是 105 行,但我的代码仍然看到 105 行,我如何在应用过滤器时自动刷新我的数据透视表。我将多次过滤我的工作表,所以我希望我的数据透视表适应我的过滤(不想直接在数据透视表上应用过滤器,而是使过程自动化)
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")
【问题讨论】:
-
我相信您正在寻找带有
Type参数xlCellTypeVisible的Range.SpecialCells Method。 -
我试过
LastRow = alarmes.Cells.SpecialCells(xlCellTypeVisible).End(xlUp).Row但我只得到 1 行而不是 4 行 -
提供一些示例代码。您可以看到使用
For Each Cell In ActiveSheet.ListObjects("Table1").ListColumns(1).DataBodyRange.SpecialCells(Type:=xlCellTypeVisible) Cell.Select Next和相同但不使用SpecialCells之间的区别(调试时,逐步查看选择了哪些单元格)。您不能使用它来获取LastRow,因为那将是 105,然后您将从第 2 行循环到第 105,您需要使用它来获取范围 2 到 LastRow 过滤后变成 58;68;104; 105 然后仅在您的代码中循环该范围。 -
如果您仍然感到困惑,请尝试将
SpecialCells添加到您设置PRange的代码行的末尾。 -
SpecialCells在PRange之后,数据透视表为空
标签: vba excel pivot-table