sorting数据透视表VBA

目的

按降序排列数据透视表值。

APPROACH

  1. 删除以前的数据透视表( PIVOT
  2. 设置新的数据透视表位置( target
  3. 创buildPivotCache( pvtCache
  4. Depion PivotTable( pvt
  5. 添加数据透视表字段( pvt.PivotFields(_)
  6. 问题:按降序排列数据透视表字段( PivotField("Base Expense")

 Sub createPivot() Dim ws As Worksheet Dim pvtCache As pivotCache Dim pvt As pivotTable Dim srcData As String Dim lastRow As Long Dim startPvt As String Dim target As Worksheet 'Delete previous pivottable Worksheets("PIVOT").PivotTables("PivotTable1").TableRange2.Clear 'Select pivot table data Worksheets("CONSOLIDATED").Activate Set ws = ActiveSheet lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row srcData = ActiveSheet.Name & "!" & Range("A1:H" & lastRow).Address(ReferenceStyle:=xlR1C1) 'Set pivot table location Set target = ThisWorkbook.Worksheets("PIVOT") startPvt = target.Name & "!" & target.Range("A1").Address(ReferenceStyle:=xlR1C1) 'Create pivot cache Set pvtCache = ActiveWorkbook.PivotCaches.Create( _ SourceType:=xlDatabase, _ SourceData:=srcData) 'Deploy pivot table Set pvt = pvtCache.CreatePivotTable( _ TableDestination:=startPvt, _ TableName:="PivotTable1") 'Add Pivot Fields pvt.PivotFields("Fiscal Year").Orientation = xlColumnField pvt.PivotFields("Fiscal Year").Position = 1 pvt.PivotFields("Fiscal Month").Orientation = xlColumnField pvt.PivotFields("Fiscal Month").Position = 2 pvt.PivotFields("Unit").Orientation = xlRowField pvt.PivotFields("Unit").Position = 1 pvt.PivotFields("Project").Orientation = xlRowField pvt.PivotFields("Project").Position = 2 pvt.PivotFields("Base Expense").Orientation = xlDataField 'Sort by largest !!!ERROR!!! pvt.PivotField("Base Expense") _ .AutoSort xlDescending, "Base Expense" End Sub 

错误

“对象不支持这个属性或方法”

@线

  'Sort by largest !!!ERROR!!! pvt.PivotField("Base Expense") _ .AutoSort xlDescending, "Base Expense" 

质询

  1. 不确定为什么这个错误被抛出。 我search了文档,导致我相信这应该工作( https://msdn.microsoft.com/en-us/library/office/ff834371.aspx ) 注意:ActiveSheet!=到工作表的数据透视表,但我不认为这应该创造一个问题在这里
  2. 任何关于代码重构的build议,我们都很感激。

您遇到的问题是您正在尝试对数据字段中的值进行sorting。 它不知道要sorting的其他字段。

您要运行自动sorting方法的数据透视图字段是您要sorting的字段。 该方法的Field参数是您要对其进行sorting的关键。

在这种情况下,你需要这样的东西:

  pvt.PivotField("Project") _ .AutoSort xlDescending, "sum of Base Expense"