Change Pivot Table Filter All Sheets or Active Sheet

In Excel 2010, you can use Slicers to change the filters in several pivot tables, with a single click.


If you don't have Excel 2010, or don't want to use Slicers, you can use programming to change multiple pivot table filters with a single click. Yes, it's more work than adding a Slicer, but better than manually changing all those pivot tables!

Change All Pivot Tables

Last December, I described how to add code to your workbook, so if you changed one pivot table filter, all the other pivot tables in the workbook would change too. Click here to read that article, and the comments: Change All Pivot Tables With One Selection

In those comments, people asked how to modify the code, so only the pivot tables on the active sheet were affected, or only a specific field was changed. In response to those comments, I've created a new version of the sample file.

Change All Pivot Tables or Active Sheet Only

The latest sample file for changing pivot table fields has 3 variations on the "Change All Page Fields" code, and it also changes the "Multiple Item Selection" settings to match changed page fields (Excel 2007 and Excel 2010 only).

The three variations are:

  1. Change any page field in a pivot table, and all matching page fields, on all sheets, are changed.
  2. Change any page field in a pivot table, and all matching page fields, on the active sheet only, are changed.
  3. Change a specific page field in a pivot table, and that page field, on the active sheet only, is changed.

Download the Sample File

To see the code, and try the variations, you can download the sample file from the Contextures website. The file will work in Excel 2007 or Excel 2010, if you enable macros.

PT0027 - Change All Page Fields - All Sheets or Active Sheet

You can also download the other sample files, showing how to change a specific field, or all fields, in the workbook's pivot tables.


7 comments to Change Pivot Table Filter All Sheets or Active Sheet

  • Thanks for this. As I've commented before this code, in its various iterations, has been useful in my work. I'm generally an "All Sheets/All Fields" kind of guy.

    The This_Sheet_All_Fields code isn't working as expected for me. It's acting like All_Sheets_All_Fields. When I scan the code it looks the same for both sheets, particularly the line:
    For each ws in ThisWorkbook.Worksheets

  • Jane

    Thanks for your example sheets Debra, they are great. I have used the code from
    PT0016 - Change Page Fields With Cell Dropdown
    and seen it quoted a lot on various posts online. I want to have 2 or 3 different drop-down lists, so defined a strfield2 and tried just replicating the section starting
    If Target.Address = ... to the end if
    It doesn't give an error, but doesn't work consistently, so I'm guessing that isn't a good approach. I'm not hugely VBA experienced, but I imagine there is a simple way to expand that code to another target and would really appreciate what I hope is very quick guidance!
    Note that I am making workbooks for users with older versions of Excel (back to 2002), so newer features are not an option.

  • Jane

    I think I may have solved it just by moving the
    For Each ws In ThisWorkbook.Worksheets
    For Each pt In ws.PivotTables
    before the
    If Target.Address = Range("D2").Address Then
    rather than after, and then have more than one set of If commands.
    If there is a better solution, I'm still very happy to hear it.

  • Paul

    Great bit of code a massive help thank you. I have 2 pivot tables and 2 pivot charts on one worksheet. I am using the This_Sheet_All_fields code PT0027. Is it possible to edit the code so that a field report selection change also changes those of the pivot charts?

    Many thanks

  • Steve Brotz

    Thank you - as a newbie these tips of code example allow me to progress more quickly. Supported by your site and books, I'm moving forward. I use this code on a worksheet that that is made active by another macro that builds three pivot charts. The problem is that the worksheet is updating (flashing) when the main macro is building the page. If I rem out the page event "screenupdating" statements, the event procedure does not work. Is there a method to delay the page event for a set duration - allowing the main macro to build the page?

  • Niall Coyne

    A big thanks for this, I was looking everywhere for something that does this and must have asked the right question in Google to eventually find this solution, which was exactly what I needed.

Leave a Reply




You can use these HTML tags

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>