【问题标题】:VBA - Add PivotField Filter to Pivot TableVBA - 将数据透视表过滤器添加到数据透视表
【发布时间】:2018-04-09 19:06:57
【问题描述】:

我有创建数据透视表并将所需的“数据透视表”添加到表中的代码。我似乎无法弄清楚的一件事是如何在“过滤器”区域下添加“数据透视字段”。

这是我的代码:

Sub CreatePivotTable()
    'PURPOSE: Creates a brand new Pivot table on a new worksheet from data in the ActiveSheet
    'Source: www.TheSpreadsheetGuru.com

    Dim pvtSht As Worksheet
    Dim summarySht As Worksheet
    Dim pvtCache As PivotCache
    Dim pvt As PivotTable
    Dim StartPvt As String
    Dim SrcData As String
    Dim pf As PivotField

    'Determine the data range you want to pivot
    SrcData = ActiveSheet.UsedRange.Address(ReferenceStyle:=xlR1C1)

    'Create a new worksheet
    Set pvtSht = Sheets.Add
    ActiveSheet.Name = "PivotTable"

    'Where do you want Pivot Table to start?
    StartPvt = pvtSht.Name & "!" & pvtSht.Range("A3").Address(ReferenceStyle:=xlR1C1)

    'Create Pivot Cache from Source Data
    Set pvtCache = ActiveWorkbook.PivotCaches.Create( _
    SourceType:=xlDatabase, _
    SourceData:=SrcData)

    'Create Pivot table from Pivot Cache
    Set pvt = pvtCache.CreatePivotTable( _
    TableDestination:=StartPvt, _
    TableName:="P1")

    'Insert Row Fields
    With ActiveSheet.PivotTables("P1").PivotFields(" Vulnerability Name")
        .Orientation = xlRowField
        .Position = 1
    End With

    With ActiveSheet.PivotTables("P1").PivotFields(" DNS Name")
        .Orientation = xlRowField
        .Position = 2
    End With

    With ActiveSheet.PivotTables("P1").PivotFields(" Operating System")
        .Orientation = xlRowField
        .Position = 3
    End With

    With ActiveSheet.PivotTables("P1")
        .AddDataField ActiveSheet.PivotTables( _
        "P1").PivotFields("IP Address"), "Count of IP Addresses"
        .PivotFields("IP Address").Orientation = xlRowField
    End With

    With Sheets("PivotTable").PivotTables("P1").PivotFields("IP Address")
        .Orientation = xlRowField
        .Position = 2
    End With

    Set pf = ActiveSheet.PivotTables("P1").PivotFields(" Vulnerability Name")

    'Collapse Pivot Field
    pf.ShowDetail = True

    'Expand Pivot Field
    pf.ShowDetail = False

    'Create a new worksheet
    Set summarySht = Sheets.Add
    ActiveSheet.Name = "Summary"

End Sub

这是它在数据透视表上输出的内容:

这是我需要它输出的内容(注意 Risk RatingFilters 下):

这是需要在工作表上显示的内容:

【问题讨论】:

    标签: vba excel


    【解决方案1】:

    这样试试

        With ActiveSheet.PivotTables("P1").PivotFields("Risk Rating")
            .Orientation = xlPageField
            .Position = 1
        End With
    

    【讨论】:

    • 感谢您的回复。我将 with 块放在最后一个 with 块之后,我收到错误 - 无法获取 PivotTable 类的 PivotFields 属性。
    • @pnuts 实际上的错误是我在“风险”中的 R 之前需要一个空格。所以它现在工作得很好:)
    • @Maddy,谢谢你的帮助:)
    【解决方案2】:

    与您在此处提出的错误无关,而只是一个通知,以大大缩短您的代码(并使阅读更清晰):

    你已经Set你的PivotTable在这里太好了:

    Set pvt = pvtCache.CreatePivotTable( _
        TableDestination:=StartPvt, _
        TableName:="P1")
    

    那么为什么不使用它,然后像这样进行其余的PivotTable 设置:

    With pvt
        With .PivotFields(" Vulnerability Name")
            .Orientation = xlRowField
            .Position = 1
        End With
    
        With .PivotFields(" DNS Name")
            .Orientation = xlRowField
            .Position = 2
        End With
    
        With .PivotFields(" Operating System")
            .Orientation = xlRowField
            .Position = 3
        End With
    
        .AddDataField .PivotFields("IP Address"), "Count of IP Addresses"
        .PivotFields("IP Address").Orientation = xlRowField
    
        With .PivotFields("IP Address")
            .Orientation = xlRowField
            .Position = 2
        End With
    
        Set pf = .PivotFields(" Vulnerability Name")
    End With
    

    【讨论】:

    • 谢谢你,正如你在我过去的帖子中看到的那样,我有很多不必要的长代码,我正在努力缩短它们。所以谢谢你:)
    猜你喜欢
    • 1970-01-01
    • 2020-07-10
    • 1970-01-01
    • 1970-01-01
    • 2016-12-24
    • 1970-01-01
    • 2010-10-20
    • 1970-01-01
    相关资源
    最近更新 更多