数据透视表更改来源到不同的数据透视表 – Microsft Excel Bug

我终于为自己修正了Excel中的错误,有时,看起来随机的数据透视表的源数据从“数据透视表32”转换为“数据透视表3”。

我一直手工编辑所有这些以文本结尾(这似乎阻止了它的发生)。

我原来的脚本实际上揭示了另一个bug Excel更新了所有数据透视表名称,但如果脚本运行时不可见,图表将完全失去源代码。

所以,无论如何,这是我写的VBA脚本。

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 

我知道没有错误陷阱等。但是,当你使用大量的数据透视表和数据透视图时,这些错误就是其中的一个,它会在最糟糕的时候造成严重的后果而不会有任何警告。 谢谢。 乔恩

将源数据数据透视表的标题更改为不以2个数字结尾的内容似乎可以防止原始错误。 我上面提供的脚本应该帮助您防止它,只要所有的透视图与透视表在同一页面上。

 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