我正在尝试:
在将过滤器应用于数据透视表之前,我拥有的代码似乎一直有效。
Sub Test1()
Dim pField As PivotField
Dim pItem As PivotItem
Set pField = Sheets("PivotTable").PivotTables(1).PivotFields("Company")
Application.ScreenUpdating = False
For Each pItem In pField.PivotItems
If pItem.Visible Then
pItem.DataRange.ShowDetail = True
ActiveSheet.Name = pItem.Name
End If
Next pItem
Application.ScreenUpdating = True
End Sub
答案 0 :(得分:0)
PivotItem.Visible
上的背景
如果您过滤PivotTable
,则您的Rowfields
或ColumnFields
中的某些部分将显示较少的PivotItems
。
不幸的是,即使您没有看到,每个对应的PivotField.PivotItem
仍以Visible
的形式返回。
同样,PivotField.VisibleItems.Count
也不会减少。
解决“确实”可见的PivotItems
过滤PivotTable
会更改DataRange
的可见PivotField
,因此您可以循环其单元格并使用该单元格的值来标识每个可见的PivotItem
:>
Dim pItemCell As Range
For Each pItemCell In pField.DataRange
If pItemCell.Value <> "(blank)" Then
Set pItem = pField.PivotItems(pItemCell.Value)
pItem.DataRange.ShowDetail = True
ActiveSheet.Name = pItem.Name
End If
Next pItemCell
您还可以遍历每个PivotRowAxis.PivotLines().PivotLineCells().PivotItem
。
请在这里查看我的答案:https://stackoverflow.com/a/55444457/10908769
获取GrandTotals列的详细信息
Dim pTable As PivotTable
Dim pField As PivotField
Dim i As Long
Set pField = Sheets("PivotTable").PivotTables(1).PivotFields("Company")
Set pTable = pField.Parent
If pTable.RowGrand = True Then
For i = 1 To pField.DataRange.Cells.Count
pTable.DataBodyRange.Cells(i, pTable.DataBodyRange.Columns.Count).ShowDetail = True
ActiveSheet.Name = pField.DataRange.Cells(i).Value
Next i
End If
ActiveSheet.Name
的提示
请注意,重命名工作表存在一些限制:https://stackoverflow.com/a/54620175/10908769