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

标签 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

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

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

关于excel - (Excel 2002) 数据透视图更新时格式丢失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1036438/

相关文章:

java - 如何使用 Jacob 从 Java 代码中禁用 VB6 MsgBox

excel - 从字符串输出格式

excel - 在 Selenium VBA 中使用 Google Chrome(安装步骤)

ms-access - access vba if then 语句中 like 的正确语法

excel - 更新税务链接后增值税号检查不起作用

python - 从 Python 执行 VBAscript

javascript - 如何在 Office Javascript API 中读取 Excel 自定义属性?

vba - 选择工作簿时运行时错误9下标超出范围

excel - 我需要做什么才能使 Excel 通过 HTTPS 访问 Web 查询?

Excel VBA 运行时错误 1004 - ThisWorkbook.Connections