I finally made myself a fix for the bug in Excel where sometimes, seemingly at random, the source data for a Pivot Chart changes from, say "Pivot Table 32" to "Pivot Table 3".
I had been hand editing all of these to end in text (which seems to stop it from happening.)
My original script actually revealed another bug. Excel updated all of the pivot table names, but then the charts would completely lose their source if they weren't visible when the script ran.
So, anyway, here's the VBA script I wrote.
Sub FixAllPivotTables()
Dim pt As PivotTable
Dim ws As Worksheet
If MsgBox("This script is mostly harmless. It will add an 'x' to the end of every Pivot Table name to stop an Excel bug where sometimes Pivot Charts lose their connection to their original pivot. Pivot Charts that are visible work with just changing the name in code, but hidden ones lose their source data. So, this activates each sheet and then zooms to all. I assume it might break if your chart and your pivot table aren't on the same page? USE WITH CAUTION! Click 'Cancel' to quit gracefully without messing with anything.", vbOKCancel) = vbOK Then
'change the settings
For Each ws In ActiveWorkbook.Worksheets
'Pivot Charts that are visible work with just changing the name in code, but hidden ones lose their source data. So, this activates each sheet and then zooms to all. I assume it might break if your chart and your pivot table aren't on the same page? USE WITH CAUTION!
ws.Activate
Cells.Select
ActiveWindow.Zoom = True
For Each pt In ws.PivotTables
'This one changes the last character of the pivot name to append an "x" so that there are no issues
'with pivot charts losing their reference when there are >10 pivot tables.
If Right(pt.Name, 1) <> "x" Then
pt.Name = pt.Name + "x"
Debug.Print pt.Name + " I added an x"
Else
Debug.Print pt.Name + " had an x already"
End If
Next pt
ActiveWindow.Zoom = 100
Range("a1").Select
Next ws
MsgBox "Added an 'x' to the end of each pivot table name if it didn't have one already.", vbOKOnly
Else
MsgBox "Cancelled", vbOKOnly
End If
End Sub
I know there's not error trapping, etc. But, this is one of those bugs when you're using a ton of pivot table and pivot charts that will wreak havoc at the worst times without any warning. Thanks. Jon