• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 72
  • Last Modified:

Updating Pivot Table within VBA

All,

I have the following code as part of a bigger routine. The whole routine goes through a list of files and opens each one to copy out some data into a consolidated file. The data to be copied is the result of a Pivot Table so the pivot table needs to be refreshed.

The particular field in the Source Data has 4 options (EPP, ESP, PSS and (blank)) and I want to filter the PT to show only ESP. However, the source data may not have all options from the outset; ESP is almost definite and blank is more than likely but the other two are less likely now but are likely to be added at some point in the future. The field is a spend type and as each project gets into later stages the spend types will occur. When creating the pivot, if the other options are not available I cannot create the filter but on each refresh I need to check that the filter is still correct. The code below is taken from the recorded script of applying the filter to a project that I knew had all 4 spend types and then amended it.

I imagine I need the On Error line to allow the script to continue without falling over when the PT Field doesn't include the variable that I am trying to make Visible/Hidden. From previous work I understand the "On Error Resume Next" will enable the script to continue for all errors so I only need it once; or do I need to split the "With...End With" into 4 blocks to check each field option and put the On Error before each block of code. In addition, how do I reset the "Error flag" so that any errors after these lines are captured and potentially stop the code running?

As always, assistance is much appreciated.

Many thanks
Rob H

On Error Resume Next
ActiveSheet.PivotTables("PivotTable1").PivotCache.Refresh
With ActiveSheet.PivotTables("PivotTable1").PivotFields("EPP/ESP")
         .PivotItems("ESP").Visible = True
         .PivotItems("EPP").Visible = False
         .PivotItems("PSS").Visible = False
         .PivotItems("(blank)").Visible = False
End With

Open in new window

0
Rob Henson
Asked:
Rob Henson
  • 2
  • 2
1 Solution
 
Rgonzo1971Commented:
HI,

1 You only need it once

and capture errors again use
On Error Goto 0 ' normal error handling
'or
On Error Goto ErrorHandler 'userdefined

Open in new window

Regards
1
 
xtermieCommented:
On Error Resume Next would also work ok but there will be no error capturing
0
 
Rob HensonFinance AnalystAuthor Commented:
@xtermie - "On Error Resume Next" is what I already have so that it ignores the potential errors caused when filtering the pivot table for values that don't exist.

@Rgonzo - I want to reset the "Error Capture" after the pivot refresh so that any further errors are captured. Will using "On Error Goto 0" work, without causing an error of its own as I don't have a line 0 for it to goto.

Thanks
Rob
0
 
Rgonzo1971Commented:
it does not create an error
On Error Resume Next
ActiveSheet.PivotTables("PivotTable1").PivotCache.Refresh
With ActiveSheet.PivotTables("PivotTable1").PivotFields("EPP/ESP")
         .PivotItems("ESP").Visible = True
         .PivotItems("EPP").Visible = False
         .PivotItems("PSS").Visible = False
         .PivotItems("(blank)").Visible = False
End With
On Error Goto 0

Open in new window

for reference
https://msdn.microsoft.com/en-us/library/5hsw66as.aspx
0
 
Rob HensonFinance AnalystAuthor Commented:
Thank you.
0

Featured Post

Free Tool: Site Down Detector

Helpful to verify reports of your own downtime, or to double check a downed website you are trying to access.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

  • 2
  • 2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now