Then you should be able to shorten the entire code to:If the sheet called New Business is the same sheet that the code is in (I strongly suspect it is) you don't need to explicitly refer to it in the code so the code becomes:Private Sub Worksheet_SelectionChange(ByVal Target As Range) Dim NewCat As String If Intersect(Target, Range("A1:B2")) Is Nothing Then Exit Sub NewCat = Worksheets("New Business").Range("B1").Value For Each ptName In Array("PivotTable7", "PivotTable1") With Worksheets("New Business").PivotTables(ptName) .PivotFields("Job No.").CurrentPage = NewCat .RefreshTable End With Next ptName End SubFinally, do you really need to do this on each selection change?Private Sub Worksheet_SelectionChange(ByVal Target As Range) Dim NewCat As String If Intersect(Target, Range("A1:B2")) Is Nothing Then Exit Sub NewCat = Range("B1").Value For Each ptName In Array("PivotTable7", "PivotTable1") With PivotTables(ptName) .PivotFields("Job No.").CurrentPage = NewCat .RefreshTable End With Next ptName End Sub
I would try putting it into the Worksheet_Change event instead.