0

我有一个数据透视表,可以对 12 个月内每个月的不同人的数据进行排序。生成数据的表具有动态日期范围(即用户可以指定将通过表级联的开始日期)。作为数据分析的一部分,从该主表生成数据透视表和图表。上个月我创建这个工具时效果很好,但是我意识到在我的代码中我有硬编码的数据透视字段名称对应于四月的月份(请参见下文)。当我尝试从 5 月的开始日期运行它时,这使我的数据透视表中断。如何使数据透视表中的“PivotFields”/数据字段动态对应于日期范围?

下面找到相关的代码。正如人们所期望的那样,错误发生在:

    "Compare individuals").PivotFields("Apr-17"), "Sum of Apr-17", xlSum
ActiveSheet.PivotTables("Compare individuals").AddDataField 

从 5 月开始尝试运行我的数据透视图/报告时。

真的很感谢任何指点!

Option Explicit
Sub CreatePivot()
 Dim pt          As PivotTable
 Dim pf          As PivotField
 Dim pi          As PivotItem
 Dim pc          As PivotCache

  With ActiveWorkbook
    For Each pc In .PivotCaches
        pc.MissingItemsLimit = xlMissingItemsNone
    Next pc
  End With


    'Generate base pivot chart
    ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
        "Indy", Version:=xlPivotTableVersion10). _
        CreatePivotTable TableDestination:="'PivotSheet'!R8C6", TableName:="Compare individuals" _
        , DefaultVersion:=xlPivotTableVersion10

    Worksheets("PivotSheet").Activate
    'Set Name and disc as field and filter respectively
    With ActiveSheet.PivotTables("Compare individuals").PivotFields("Name")
        .Orientation = xlRowField
        .Position = 1
    End With
    With ActiveSheet.PivotTables("Compare individuals").PivotFields("Disc ")
        .Orientation = xlPageField
        .Position = 1
    End With

    'Add data; sums of each month per individual
    ActiveSheet.PivotTables("Compare individuals").AddDataField ActiveSheet.PivotTables( _
        "Compare individuals").PivotFields("Apr-17"), "Sum of Apr-17", xlSum
    ActiveSheet.PivotTables("Compare individuals").AddDataField ActiveSheet.PivotTables( _
        "Compare individuals").PivotFields("May-17"), "Sum of May-17", xlSum
    ActiveSheet.PivotTables("Compare individuals").AddDataField ActiveSheet.PivotTables( _
        "Compare individuals").PivotFields("Jun-17"), "Sum of Jun-17", xlSum
    ActiveSheet.PivotTables("Compare individuals").AddDataField ActiveSheet.PivotTables( _
        "Compare individuals").PivotFields("Jul-17"), "Sum of Jul-17", xlSum
    ActiveSheet.PivotTables("Compare individuals").AddDataField ActiveSheet.PivotTables( _
        "Compare individuals").PivotFields("Aug-17"), "Sum of Aug-17", xlSum
    ActiveSheet.PivotTables("Compare individuals").AddDataField ActiveSheet.PivotTables( _
        "Compare individuals").PivotFields("Sep-17"), "Sum of Sep-17", xlSum
    ActiveSheet.PivotTables("Compare individuals").AddDataField ActiveSheet.PivotTables( _
        "Compare individuals").PivotFields("Oct-17"), "Sum of Oct-17", xlSum
    ActiveSheet.PivotTables("Compare individuals").AddDataField ActiveSheet.PivotTables( _
        "Compare individuals").PivotFields("Nov-17"), "Sum of Nov-17", xlSum
    ActiveSheet.PivotTables("Compare individuals").AddDataField ActiveSheet.PivotTables( _
        "Compare individuals").PivotFields("Dec-17"), "Sum of Dec-17", xlSum
    ActiveSheet.PivotTables("Compare individuals").AddDataField ActiveSheet.PivotTables( _
        "Compare individuals").PivotFields("Jan-18"), "Sum of Jan-18", xlSum
    ActiveSheet.PivotTables("Compare individuals").AddDataField ActiveSheet.PivotTables( _
        "Compare individuals").PivotFields("Feb-18"), "Sum of Feb-18", xlSum
    ActiveSheet.PivotTables("Compare individuals").AddDataField ActiveSheet.PivotTables( _
        "Compare individuals").PivotFields("Mar-18"), "Sum of Mar-18", xlSum
    ActiveSheet.PivotTables("Compare individuals").PivotFields("Disc ").CurrentPage = _
        "(All)"
'Set data in columns
    With ActiveSheet.PivotTables("Compare individuals").DataPivotField
        .Orientation = xlColumnField
        .Position = 1
    End With

编辑:更多的上下文。我的数据透视表如下所示: 枢

该错误表面上出现,因为实际数据表中没有“Apr-17”

我的源数据如下所示: 资源

其中月份/日期范围是动态的(来自初始输入)。

我想要代码做的是: 期望的

即把所有的日期列放到表中,不管它们叫什么。

4

1 回答 1

0

@A.Doe,试试这个

Dim f1 As PivotField
For Each f1 In ActiveSheet.PivotTables("Compare individuals").PivotFields
    'MsgBox f1.Name test code
    If (InStr(f1.Name, "17") > 0) Then 'or some valid condition
        ActiveSheet.PivotTables("Compare individuals").AddDataField ActiveSheet.PivotTables( _
            "Compare individuals").PivotFields(f1.Name), "Sum of " & f1.Name, xlSum
    End If
Next
于 2017-05-09T17:37:27.423 回答