Here’s another macro to help with documenting what’s in an Excel workbook. Use this macro to make a list of all the fields in a pivot table. The list includes details for each field, such as its caption and location in the pivot table layout.
Pivot Field List
To use this macro, select a worksheet that has a pivot table. The macro adds a new sheet to the workbook, with a list of all the pivot fields, in that pivot table.
NOTE: If there are multiple pivot tables on the active sheet, the macro lists the pivot fields from the first pivot table only.
Pivot Field Details
In the list, the following details, if available, are shown for each pivot field:
- Caption
- Source Name
- Location (in the layout)
- Position (at that location)
- Sample Item from the field
- Formula (for Calculated Fields)
Also, a Notes column is included, where you can enter your own comments about the pivot fields, if needed.
Data Model Pivot Tables
The macro to list pivot fields also works for pivot tables that have been added to the workbook’s Data Model. These are OLAP-based pivot tables, and their source names and pivot items look different from those in Normal pivot tables.
Normal Vs Data Model
If you list all the pivot fields for a Normal pivot table, all the fields from the source data are listed. In the Location column, you’ll see “Hidden” listed, if the pivot field is not in the pivot table layout.
For Data Model pivot tables, only the fields in the pivot table layout are listed. Fields that are not in the layout are not included in the PivotFields collection.
As a result, none of the fields will show “Hidden” as their location.
Using the Pivot Fields List Macro
The following code adds a new sheet, named “Pivot_Fields_List”, to the workbook. Then it creates a list of all the pivot fields in the first pivot table on the active sheet.
WARNING: If there is an existing sheet named “Pivot_Fields_List”, it is deleted. If you want to keep previous lists, rename the sheets before running the macro again.
Pivot Fields List Macro Code
Add the following code to a regular code module in your Excel file, and run it when needed.
NOTE: Because of a problem with the Orientation method, all the data fields are identified as “Hidden”. Additional code checks the “Hidden” fields, to see if they are in the DataFields collection.
Sub OrderList_PivotFields()
'contextures.com
'use the Notes column
' for comments about fields
Dim lRow As Long
Dim wsList As Worksheet
Dim pt As PivotTable
Dim pf As PivotField
Dim df As PivotField
Dim pi As PivotItem
Dim strList As String
Dim strLoc As String
strList = "Pivot_Fields_List"
Application.DisplayAlerts = False
On Error Resume Next
Set pt = ActiveSheet.PivotTables(1)
If pt Is Nothing Then
MsgBox "No pivot table on active sheet"
GoTo exitHandler
End If
Sheets(strList).Delete
On Error GoTo errHandler
Set wsList = Sheets.Add
lRow = 2
With wsList
.Name = strList
.Cells(1, 1).Value = "Caption"
.Cells(1, 2).Value = "Source Name"
.Cells(1, 3).Value = "Location"
.Cells(1, 4).Value = "Position"
.Cells(1, 5).Value = "Sample Item"
.Cells(1, 6).Value = "Formula"
.Cells(1, 7).Value = "Notes"
.Rows(1).Font.Bold = True
For Each pf In pt.PivotFields
If pf.Caption <> "Values" Then
.Cells(lRow, 1).Value = pf.Caption
.Cells(lRow, 2).Value = pf.SourceName
Select Case pf.Orientation
Case xlHidden
strLoc = "Hidden"
Case xlRowField
strLoc = "Row"
Case xlColumnField
strLoc = "Column"
Case xlPageField
strLoc = "Page"
Case xlDataField
strLoc = "Data"
End Select
If strLoc = "Hidden" Then
For Each df In pt.DataFields
If df.SourceName _
= pf.SourceName Then
strLoc = "Data"
Exit For
End If
Next df
End If
.Cells(lRow, 3).Value = strLoc
.Cells(lRow, 4).Value = pf.Position
On Error Resume Next
If pf.PivotItems.Count > 0 Then
.Cells(lRow, 5).Value _
= pf.PivotItems(1).Value
End If
On Error GoTo errHandler
'print the formula for calculated fields
If pf.IsCalculated = True Then
.Cells(lRow, 6).Value = _
Right(pf.Formula, Len(pf.Formula) - 1)
End If
lRow = lRow + 1
End If
Next pf
.Columns("A:G").EntireColumn.AutoFit
End With
exitHandler:
Application.DisplayAlerts = True
Exit Sub
errHandler:
MsgBox "Could not create list"
Resume exitHandler
End Sub
Get the Sample Workbook
Get the sample file with this macro, and pivot tables for testing, from the List All Pivot Fields page on my Contextures website.
Also, see more information on Pivot Field settings, and macros to remove Pivot Fields.
_______________________________
List All Pivot Field Details
_______________________
Outstanding work, Debra.
Very useful, as usual!
Could it be added to such that it reports on any fields in the Values area? It currently ignores those.