(Excel 2002)数据透视图更新时格式丢失

(Excel 2002)数据透视图更新时格式丢失,excel,vba,Excel,Vba,我有一组数据透视表/图表,这些数据透视表/图表是根据VBA代码自动创建的,具有自定义格式 当我从图表的下拉列表中更改要显示的数据选择时,自定义格式将恢复为图表类型的默认显示。基础图表数据不会更改,只更改图表上显示的数据。每次更改行字段中的轴项目选择时,我必须做什么才能保留自定义格式 编辑1:透视表的基础数据不会更改。但是,每次我更改行、列或页面字段上的筛选器时,更新的透视图都会丢失VBA代码设置的原始格式 编辑2:这仅适用于早于Excel 2007的Excel版本 在我看来,VBA代码生成了透视

我有一组数据透视表/图表,这些数据透视表/图表是根据VBA代码自动创建的,具有自定义格式

当我从图表的下拉列表中更改要显示的数据选择时,自定义格式将恢复为图表类型的默认显示。基础图表数据不会更改,只更改图表上显示的数据。每次更改行字段中的轴项目选择时,我必须做什么才能保留自定义格式

编辑1:透视表的基础数据不会更改。但是,每次我更改行、列或页面字段上的筛选器时,更新的透视图都会丢失VBA代码设置的原始格式


编辑2:这仅适用于早于Excel 2007的Excel版本

在我看来,VBA代码生成了透视表/图表,然后您试图对其进行调整。不幸的是,使用VBA更新透视表/图表时,所有自定义格式都会丢失。Excel基本上每次都会创建一个新的

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

我会试着用这个来解决问题

创建两个过程:一个在给定数据时从头创建数据透视表,另一个在给定数据透视表的范围时格式化数据透视表。代码可能是这样的

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
然后,接下来要做的就是创建一个只调用这两个函数的包装器函数,使它像当前代码一样正常工作

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
这样做的目的是,如果创建一个表,然后必须对其进行调整,则可以使用该格式数据透视表来格式化更新后的表


对于额外的疯狂,让包含数据透视表的工作表启动它的工作表。更改或工作表。激活事件以搜索数据透视表并调用格式化函数:D

能否将xls文件放在某个位置或其示例以查看问题的实际情况?快速思考-是否每次都在宏中创建图表?此处示例xls文件:注意如果你在Excel2007中查看它,它工作得很好。只是不在旧版本的Excel中