Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 排序数据透视表VBA_Excel_Vba_Sorting_Pivot Table - Fatal编程技术网

Excel 排序数据透视表VBA

Excel 排序数据透视表VBA,excel,vba,sorting,pivot-table,Excel,Vba,Sorting,Pivot Table,目标 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("PivotTab

目标

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
按降序对数据透视表值排序

方法

  • 删除以前的数据透视表(
    PIVOT
  • 设置新的数据透视表位置(
    target
  • 创建数据透视缓存(
    pvtCache
  • 数据透视表(
    pvt
  • 添加数据透视表字段(
    pvt.PivotFields(41;)
  • 问题:按降序排列数据透视表字段(
    数据透视字段(“基本费用”)
  • 代码

    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" 
    
    问题

  • 不确定抛出此错误的原因。我搜索了一些文档,这些文档使我相信这应该是可行的()注意:ActiveSheet!=数据透视表在工作表上,但我不认为这会造成问题
  • 任何关于代码重构的建议都将不胜感激

  • 您遇到的问题是,您正在尝试对数据字段中的值进行排序。它不知道按哪个字段排序

    要在其上运行
    AutoSort
    方法的数据透视字段就是要排序的字段。方法的
    字段
    参数是要对其进行排序的键

    在这种情况下,您需要以下内容:

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

    您遇到的问题是,您正在尝试对数据字段中的值进行排序。它不知道按哪个字段排序

    要在其上运行
    AutoSort
    方法的数据透视字段就是要排序的字段。方法的
    字段
    参数是要对其进行排序的键

    在这种情况下,您需要以下内容:

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