Private Sub Worksheet_Change(ByVal Target As Range)
Dim KeyCells As Range
Set KeyCells = Range("C3:M3")
If Not Application.Intersect(KeyCells, Range(Target.Address)) Is Nothing Then
On Error GoTo clean_up
Application.Calculation = xlManual
Application.StatusBar = "Hi " & Application.UserName & "! Your report will be ready in a few seconds..."
Application.EnableEvents = False
'Set the Variables to be used
Dim pt1 As PivotTable
Dim pt2 As PivotTable
Dim pt3 As PivotTable
Dim Field1 As PivotField
Dim Field2 As PivotField
Dim Field3 As PivotField
Dim Field4 As PivotField
Dim Field5 As PivotField
Dim Field6 As PivotField
Dim NewCat2 As String, NewCat3 As String
Dim pi As PivotItem
Dim Yeartype As String, sumField As String
Yeartype = Range("h3").Value
NewCat2 = Range("g3").Value
NewCat3 = Range("g3").Value - 1
NewCat4 = "Yes"
'-----Pivot1-----
Set pt1 = PivotTables("PivotTable1")
pt1.ManualUpdate = True
sumField = Range("C3").Value
With pt1.PivotFields(Yeartype)
.Orientation = xlRowField
.Position = 1
End With
If Yeartype = "Financial Year" Then
pt1.PivotFields("Calendar Year").Orientation = xlHidden
Set Field2 = pt1.PivotFields("Financial Year2")
Else
pt1.PivotFields("Financial Year").Orientation = xlHidden
Set Field2 = pt1.PivotFields("Calendar Year2")
End If
pt1.DataFields(1).Orientation = xlHidden
pt1.PivotFields(sumField).Orientation = xlDataField
pt1.AllowMultipleFilters = True
pt1.ClearAllFilters
For Each pi In Field2.PivotItems
If Not ((pi.Name = NewCat2) Or (pi.Name = NewCat3)) Then
pi.Visible = False
End If
Next
pt1.ManualUpdate = False
pt1.RefreshTable
'-----Pivot2-----
Set pt2 = PivotTables("PivotTable2")
Set Field5 = pt2.PivotFields("Today & LY")
pt2.ManualUpdate = True
sumField = Range("C3").Value
With pt2.PivotFields(Yeartype)
.Orientation = xlRowField
.Position = 1
End With
If Yeartype = "Financial Year" Then
pt2.PivotFields("Calendar Year").Orientation = xlHidden
Set Field4 = pt2.PivotFields("Financial Year2")
Else
pt2.PivotFields("Financial Year").Orientation = xlHidden
Set Field4 = pt2.PivotFields("Calendar Year2")
End If
pt2.AllowMultipleFilters = True
pt2.ClearAllFilters
Field5.CurrentPage = NewCat4
For Each pi In Field4.PivotItems
If Not ((pi.Name = NewCat2) Or (pi.Name = NewCat3)) Then
pi.Visible = False
End If
Next
pt2.ManualUpdate = False
pt2.RefreshTable
'-----Pivot3-----
Set pt3 = PivotTables("PivotTable3")
pt3.ManualUpdate = True
sumField = Range("C3").Value
With pt3.PivotFields(Yeartype)
.Orientation = xlRowField
.Position = 1
End With
If Yeartype = "Financial Year" Then
pt3.PivotFields("Calendar Year").Orientation = xlHidden
Set Field6 = pt3.PivotFields("Financial Year2")
Else
pt3.PivotFields("Financial Year").Orientation = xlHidden
Set Field6 = pt3.PivotFields("Calendar Year2")
End If
pt3.DataFields(1).Orientation = xlHidden
pt3.PivotFields(sumField).Orientation = xlDataField
pt3.AllowMultipleFilters = True
pt3.ClearAllFilters
Field6.ClearAllFilters
For Each pi In Field6.PivotItems
If Not ((pi.Name = NewCat2) Or (pi.Name = NewCat3)) Then
pi.Visible = False
End If
Next
pt3.ManualUpdate = False
pt3.RefreshTable
End If
Application.Calculation = xlAutomatic
Application.StatusBar = "All done!"
clean_up:
Application.EnableEvents = True
End Sub