首页 文章

使用vba在更改透视字段名称时对更新透视进行排序

提问于
浏览
0

我有一个由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调试突出显示为黄色 .

1 回答

  • 0

    我发现了问题 .

    下面这行只错过了一个字母:

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

    相反,它必须是:工作表("pivot") . PivotTables("Draaitabel1") . PivotField s ("Product")_ .AutoSort xlDescending,pfvalue

    现在它完美分类 .

相关问题