【问题标题】:using vba to sort update pivot on changing pivot field name使用 vba 在更改数据透视字段名称时对更新数据透视进行排序
【发布时间】:2018-09-21 12:04:43
【问题描述】:

我有一个由 43 个数据透视字段组成的数据透视表。 39 om 它们用于数据字段。每 4 周使用新数据更新数据,其中 39 个数据字段中的第一个不再包含在数据中,最后添加了一个新数据字段。

我有一个脚本可以删除所有数据字段,然后添加所有需要的 39 个数据字段。唯一剩下的就是使用最后一个数据字段的(值)对之后的数据进行排序。

我认为我可以获取最后一个数据字段的名称并将其用作排序脚本的字符串,这样就完成了。但结果并没有像我希望的那样。

我有这个用于读取/获取我想用于排序的数据透视字段值:

Sub AsSum()
Dim pf As PivotField
Dim pfvalue As String

With Worksheets("pivot").PivotTables("Draaitabel1")
pfvalue = .PivotFields(42).Name


.ManualUpdate = True
For Each pf In .DataFields
With pf
.Function = xlSum
.Caption = "." & .SourceName
.NumberFormat = "#,##0"
End With
Next pf
.ManualUpdate = False
End With

Worksheets("pivot").PivotTables("Draaitabel1").PivotCache.Refresh

Worksheets("pivot").PivotTables("Draaitabel1").PivotField("Product") _
 .AutoSort xlDescending, pfvalue

End Sub

我在这里做错了什么来让我的表格按最后添加的数据周期排序?

以下是枢轴布局的一部分和可用的枢轴字段列表: 我想对带箭头的枢轴列/字段上的枢轴进行排序

pfvalue 脚本完美地读出了正确的字段名称:

但是当我开始进行实际排序时,我得到一个错误(执行期间错误 438:此对象不支持此属性或方法):

这是实际的枢轴布局/设计:

当启动宏记录器时,我只是手动按最后一列对枢轴进行排序,这是宏记录器创建的脚本:

ActiveSheet.PivotTables("Draaitabel1").PivotFields("Product").AutoSort _
        xlDescending, ".Qw 32, 2018", ActiveSheet.PivotTables("Draaitabel1"). _
        PivotColumnAxis.PivotLines(39), 1

我尝试使用它并将最后一部分添加到我的脚本中,看看它是否有影响,但它没有,这就是我将它添加到我的脚本的方式:

Worksheets("pivot").PivotTables("Draaitabel1").PivotCache.Refresh

Worksheets("pivot").PivotTables("Draaitabel1").PivotField("Product") _
 .AutoSort xlDescending, pfvalue, Worksheets("pivot").PivotColumnAxis.PivotLines(39), 1


End Sub

实际排序的最后几行仍然通过 vba 调试以黄色突出显示。

【问题讨论】:

  • "我得到一个错误" 究竟是什么错误?另外请不要将代码发布为图像,只需复制粘贴代码本身,这样可以更轻松地重新创建代码以进行调试。
  • 我错过了错误号,我以为我没有。我在帖子中添加了错误消息。带有代码的图像只是为了说明代码返回的值,实际代码在我的问题中以代码形式发布。
  • 查看您的With 行和出错的第一行。现在阅读它们,因为它们是一行,你可能会发现哪里出了问题;)
  • 我花了很多时间看你提到的那些行,但我就是没看到..
  • 那是因为你改变了你的代码。在之前的版本中它是:Worksheets().pivottable().pivottable()

标签: excel vba sorting excel-2010


【解决方案1】:

我发现了问题。

下面这一行只漏掉了一个字母:

Worksheets("pivot").PivotTables("Draaitabel1").PivotField("Product") _
 .AutoSort xlDescending, pfvalue

相反,它必须是: Worksheets("pivot").PivotTables("Draaitabel1").PivotFields("Product") _ .AutoSort xlDescending, pfvalue

现在排序完美。

【讨论】:

    猜你喜欢
    • 2019-02-24
    • 1970-01-01
    • 1970-01-01
    • 2017-10-01
    • 2014-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-08
    相关资源
    最近更新 更多