(Excel 2002)数据透视表更新丢失的格式

我有一组自动从VBA代码自定义格式创build的数据透视表/图表。

当我从图表下拉列表中更改要显示的数据select时,自定义格式将恢复为图表types的默认显示。 底层图表数据不会更改,只会显示在图表上。 每当我在行字段中更改数据透视表项select时,我必须做些什么来保留自定义格式?

编辑1:数据透视表的底层数据不会更改。 但是,每次更改行,列或页面字段上的filter时,更新后的数据透视表都会丢失由VBA代码设置的原始格式。

编辑2:这只适用于Excel 2007以前的Excel版本。

对我来说,听起来是VBA代码生成数据透视表/图表,然后你试图调整它。 不幸的是,在VBA中,更新数据透视表/图表时,所有自定义格式都将丢失。 Excel基本上每次都创build一个新的。

如果您在Excel中手动进行格式设置,我认为Excel会跟踪该格式,并会在更改数据时保留格式。 我能想到的例子是,如果你不小心删除了一个工作表你撤消它,但是如果你在VBA中删除工作表,没有办法撤销。

我会尝试这个解决scheme。

创build两个过程:一个在给定数据时从头开始创build数据透视表,另一个在给定数据透视表的范围时对数据透视表进行格式化。 代码可能看起来像这样

Sub GeneratePivotTable(rng as Range, var1 as Variant, var2 as Variant) ' Code here that makes your Pivot Table ' pass whatever you need to get the job done End Sub Sub FormatPivotTable(rng as Range, var1 as Variant, var2 as Variant) ' Code here to format pivot table given range and other information ' You might even be able to just directly pass a PivotTable object :D End Sub 

然后,你必须做的下一步,使其function就像你当前的代码是创build一个包装函数,只是调用两者。

 Sub GenerateAndFormatPivotTable(rng as Range, var1 as Variant, var2 as Variant) Call GeneratePivotTable(rng, var1, var2) ' Maybe some processing here to set up the next call Call FormatPivotTable(rng, var1, var2) End Sub 

如果你想通过数据透视表作为一个对象,你可以做一些整洁的东西….

 Function GeneratePivotTable(variables as Variant) as PivotTable ' Generate your pivot table and return it GeneratePivotTable = myPivotTableThatIMade End Function Sub FormatPivotTable(aPivotTableThatYouMake as PivotTable) ' Code that formats your PivotTable End Sub Sub GenerateAndFormatPivotTable(rng as Range, var1 as Variant, var2 as Variant Call FormatPivotTable(GeneratePivotTable(variables as Variant) End Sub 

你做这一切,所以如果你做一个表,然后必须调整它,你可以使用FormatPivotTable来格式化更新的表。

对于额外的疯狂,让工作表具有数据透视表触发它的Worksheet.Change或Worksheet.Activate事件来search数据透视表并调用您的格式化函数:D