【问题标题】:Vba code to create a pivot table and then filter by value top 10用于创建数据透视表然后按值前 10 过滤的 Vba 代码
【发布时间】:2014-04-11 13:03:34
【问题描述】:

我有一些代码可以创建一个我想要的数据透视表,但是当我尝试添加一个数据透视过滤器来过滤前十个值时,我得到一个错误:

“运行时错误 1004:应用程序定义或对象定义错误”

Sub Create_Port_Pivots(dataField, PivotLastRow, tableDest, counter)
        '
        ' Creates pivot table on Pivot sheet
        ' Author: Daryl Findlay (dfind)
        '
        Dim objTable As PivotTable, objField As PivotField

        ' Select the source sheet and assign LastRow & LastCol
        ActiveWorkbook.Sheets("Data").Select
        LastRow = Range("A3").End(xlDown).Row
        LastCol = Range("A3").End(xlToRight).Column

        ' Create the PivotTable object.
        Set objTable = ActiveSheet.PivotTableWizard( _
            SourceType:=xlDatabase, _
            sourceData:=ActiveSheet.Name & "!R1C1:R" & LastRow & "C" & LastCol, _
            TableDestination:="Pivot!R" & PivotLastRow & tableDest, _
            TableName:="Pivot" & counter)

        ' Specify row and column fields.
        Set objField = objTable.PivotFields("Date")
        objField.Orientation = xlRowField
        Set objField = objTable.PivotFields("Time Group")
        objField.Orientation = xlColumnField
        Set objField = objTable.PivotFields("Port Name")
        objField.Orientation = xlRowField

        ' Specify a data field with its summary.
        Set objField = objTable.PivotFields(dataField)
        objField.Orientation = xlDataField
        objField.Function = xlAverage
        ' -----------------  Filter by top 10 - Error with second param
        objField.PivotFilters.Add xlTopCount, objTable.PivotFields("Port Name"), 10

 End Sub

调试将这一行突出显示为问题:

objField.PivotFilters.Add xlTopCount, objTable.PivotFields("Port Name"), 10

我认为问题可能出在该函数调用的第二个参数上。任何帮助将不胜感激。

【问题讨论】:

    标签: excel vba pivot pivot-table


    【解决方案1】:

    在与同事交谈后,我发现了另一种方法。

    ActiveSheet.PivotTables("Pivot" & counter).PivotFields("Port Name").AutoShow xlAutomatic _
            , xlTop, 10, "Average of Max I/O /sec"
    

    用上面的代码行替换objField.PivotFilters.Add xlTopCount, objTable.PivotFields("Port Name"), 10,它将只显示前10个值

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-24
      • 1970-01-01
      • 2016-07-08
      相关资源
      最近更新 更多