In this tutorial series, you will learn how to automate Pivot Table in Excel using VBA.
Pivot Table is probably one of the most useful and powerful features in Excel, especially for reporting and data analysis. Using pivot table, we can extract useful information that is hard to see from a raw data source itself. And VBA, being the built-in programming language of an Excel application, which allow us to automate and streamline many things we do with Pivot Table.
How to enable Developer Tab: https://youtu.be/fPPLhQOqj4s
Download Financial Sample Excel Workbook: https://docs.microsoft.com/en-us/power-bi/create-reports/sample-financial-download
Source Code:
Sub Create_PivotTable()
Dim wb As Workbook
Dim wsSource As Worksheet, wsTarget As Worksheet
Dim LastRow As Long, LastColumn As Long
Dim SourceDataRange As Range
Dim PTCache As PivotCache
Dim PT As PivotTable
'On Error GoTo errHandler
Set wb = ThisWorkbook
Set wsTarget = wb.Worksheets("Report")
wsTarget.Select
wsTarget.Cells.Clear
'// Step 1. Define my pivot table data source
Set wsSource = wb.Worksheets("Source Data")
With wsSource
LastRow = .Cells(Rows.Count, "A").End(xlUp).Row
LastColumn = .Cells(1, Columns.Count).End(xlToLeft).Column
'// Define SourceDataRange object
Set SourceDataRange = .Range(.Cells(1, 1), .Cells(LastRow, LastColumn))
End With
'// Step 2. Create Pivot Cache
Set PTCache = wb.PivotCaches.Create(xlDatabase, SourceDataRange)
'// Step 3. Create Pivot Table
Set PT = PTCache.CreatePivotTable(wsTarget.Range("C5"), "Sales Report XYZ")
With PT
'// Show GrandTotals
.ColumnGrand = False
.RowGrand = False
.RowAxisLayout xlTabularRow
.TableStyle2 = "PivotStyleMedium10"
'.TableStyle2 = "PivotStyleLight10"
'===================
' Layout & Format Tab
'===================
.MergeLabels = True
.DisplayErrorString = True
.ErrorString = "Error Value"
.DisplayNullString = True
.NullString = "Empty Value"
.HasAutoFormat = False
.PreserveFormatting = True
'===================
'// Totals & Filters
'===================
.RowGrand = False
.ColumnGrand = True
.AllowMultipleFilters = False
.SortUsingCustomLists = True
'==========
'// Display
'==========
.ShowDrillIndicators = True
.DisplayContextTooltips = True
.DisplayFieldCaptions = False
.InGridDropZones = False
.FieldListSortAscending = False
'==============
'// Printing Tab
'==============
.PrintDrillIndicators = False
.RepeatItemsOnEachPrintedPage = True
.PrintTitles = True
'========
'// Data
'========
.SaveData = True
.EnableDrilldown = True
.PivotCache.RefreshOnFileOpen = True
'==========
'// Alt Text
'==========
.AlternativeText = "Sales Summary2"
.Summary = "Sales Summary Description"
'------------------------
' Add Pivot Fields
'------------------------
'// Filters
With .PivotFields("Product")
.Orientation = xlPageField
.EnableMultiplePageItems = False
End With
With .PivotFields("Year")
.Orientation = xlPageField
.EnableMultiplePageItems = False
End With
'// Rows Section
With .PivotFields("Country")
.Orientation = xlRowField
.Subtotals(1) = False
.Subtotals(4) = True
End With
With .PivotFields("Segment")
.Orientation = xlRowField
End With
'// Columns
With .PivotFields("Month Name")
.Orientation = xlColumnField
End With
'// Values
With .PivotFields("Sales")
.Orientation = xlDataField
.Function = xlSum
.NumberFormat = "$#,##0.00"
End With
With .PivotFields("Profit")
.Orientation = xlDataField
.Function = xlAverage
.NumberFormat = "$#,##0.00"
End With
'// Group by Values Level
With .DataPivotField
.Orientation = xlRowField
.Position = 3
End With
End With
CleanUp:
Set PT = Nothing
Set PTCache = Nothing
Set SourceDataRange = Nothing
Set wsSource = Nothing
Set wsTarget = Nothing
Set wb = Nothing
Exit Sub
errHandler:
MsgBox "Error: " & Err.Description, vbExclamation
GoTo CleanUp
End Sub
Sub Delete_PT_Test()
Call Delete_Pivot_Tables("Report")
Call Delete_Pivot_Tables("Test2")
End Sub
Private Sub Delete_Pivot_Tables(ByVal worksheet_name As String)
Dim ws As Worksheet
Dim PT As PivotTable
On Error GoTo errHandler
Set ws = ThisWorkbook.Worksheets(worksheet_name)
'// iterate each pivot table in the worksheet
For Each PT In ws.PivotTables
PT.TableRange2.Clear
Next PT
errHandler:
End Sub

Hello – I can not get past the Set wsTarget = wb.Worksheet(“Report”)
Any help on why this is causing an error?