在新工作表中显示每个枢纽项目的详细信息并更改其名称

时间:2019-03-31 17:02:51

标签: excel vba pivot-table

我正在尝试:

  1. 在新工作表的数据透视表中为每个可见的公司创建一个追溯表。
  2. 用公司名称重命名工作表。

在将过滤器应用于数据透视表之前,我拥有的代码似乎一直有效。

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

1 个答案:

答案 0 :(得分:0)

PivotItem.Visible上的背景

如果您过滤PivotTable,则您的RowfieldsColumnFields中的某些部分将显示较少的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