【问题标题】:(Excel 2002) Formatting Lost on Pivot Chart Update(Excel 2002) 数据透视图更新时格式丢失
【发布时间】:2009-06-26 13:36:46
【问题描述】:

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

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

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

编辑 2:这仅适用于 Excel 2007 之前的 Excel 版本。

【问题讨论】:

  • 您能否将 xls 文件放在某个地方或其中的一个样本以查看实际问题?
  • 快速思考 - 您是否每次都在宏中重新创建图表?
  • 此处的 xls 文件示例:scribd.com/share/upload/13087523/20qu55pbhw9wllhuy3xk 请注意,如果您在 Excel 2007 中查看它,它可以正常工作。只是不在旧版本的 Excel 中

标签: excel vba


【解决方案1】:

在我看来,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

所有这些都是您做的,所以如果您制作了一个表格,然后必须对其进行调整,您可以使用该 FormatPivotTable 来格式化更新后的表格。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多