VBA Pivot Field Filter Error

David Edwards
David Edwards used Ask the Experts™
on
Hi there, I have written a VBA procedure (well multiple as its very large code) which basically re-creates a large number of Pivot tables from the source data sheet so as the source data changes, I delete & rebuild the Pivots.  All of this is working fine.  

However, in the source data, there is a column called "Region" and there are 5 main regions consisting of CEE, DACH, UK/IE, NL & CENTER.  I have noticed towards the very end of coding, that in some cases, this approach is generating an error and its where the source data for the Pivot, does not actually contain a specific region

For example, if I copy the VBA for the multiple Pivots I created for NL region, I have been setting the region filters in VBA as follows:-

'Add Region Filter
With .PivotFields("Region")
        .PivotItems("CEE").Visible = False
        .PivotItems("DACH").Visible = False
        .PivotItems("UK/IE").Visible = False
        .PivotItems("CENTER").Visible = False
        .PivotItems("(blank)").Visible = False
End With

The above works fine so long as in the source data for the Pivot I am creating, all of the values above are present, if for example, in the Pivot source data, there is no data for "UK/IE", the VBA throws an error, rather than simply skipping over the appropriate line of code.

Is there an easy / quick resolution sticking with the above structure, to get VBA to ignore a filter request if the data does not exist in the source ( I do not really want to re write all of the code - it really is quite massive) ?

Thanks in advance
Dave
Comment
Watch Question

Do more with

Expert Office
EXPERT OFFICE® is a registered trademark of EXPERTS EXCHANGE®
Managing Director/Excel VBA Developer
Distinguished Expert 2018
Commented:
you can add as below;
On Error Resume Next
'Add Region Filter
With .PivotFields("Region")
        .PivotItems("CEE").Visible = False
        .PivotItems("DACH").Visible = False
        .PivotItems("UK/IE").Visible = False
        .PivotItems("CENTER").Visible = False
        .PivotItems("(blank)").Visible = False
End With
On Error Goto 0

Open in new window

Author

Commented:
thanks - that seems simple enough :)  - will the "Goto 0" part work ok if this filter logic appears multiple times within a proc?
ShumsManaging Director/Excel VBA Developer
Distinguished Expert 2018

Commented:
You need to start with Error Resume Next before every loop and end with On Error Goto 0
Ensure you’re charging the right price for your IT

Do you wonder if your IT business is truly profitable or if you should raise your prices? Learn how to calculate your overhead burden using our free interactive tool and use it to determine the right price for your IT services. Start calculating Now!

Rob HensonFinance Analyst
Commented:
I had a similar issue with VBA refreshing Pivot Tables.

My Row Value label was Cost Type and was made up of 3 types of Cost (Support, Procurement and Consultant). I was refreshing the table for each cost type to then further generate details for accrual journals and came across this issue.

Lets imagine I ran the report for Support and the data concerned including some Support costs and the journal data was suitably created. However, when I then ran the report for Procurement there was no Procurement costs in the data set. When trying to set the pivot table to only show Procurement it fell over because it couldn't do it so I used the "On Error Resume Next" statement as suggested. This left the Pivot Table showing the Support data and then onward processing created erroneous Journal data because the pivot showed the incorrect data.

To get round this I implemented a check count on the sheet with the pivot. I set a cell to the cost type value being refreshed and in the next cell a count of that cost type in the particular pivot column. The VBA process then checked that the count was greater than zero before processing the data in the pivot table.

Hope that helps
Thanks
Rob

Author

Commented:
thanks this worked perfectly and I will check the rest of my code and add in Error Resume Next before every loop and end with On Error Goto 0
Rob HensonFinance Analyst

Commented:
Have you noted my comment.

When you use "On Error Resume Next" to skip the Pivot Filter, the Pivot Table will not change and will still show the data from the previous refresh; ie one of the Regions that does exist in that Pivot.
ShumsManaging Director/Excel VBA Developer
Distinguished Expert 2018

Commented:
No comment has been added to this question in more than 14 days, so it is now classified as abandoned.

I have recommended this question be closed as follows:
Split: Shums (ID: 42052688) and Rob Henson (ID: 42052688)

If you feel this question should be closed differently, post an objection and a moderator will read all objections and then close it as they feel fit. If no one objects, this question will be closed automatically the way described above.

Do more with

Expert Office
Submit tech questions to Ask the Experts™ at any time to receive solutions, advice, and new ideas from leading industry professionals.

Start 7-Day Free Trial