2016-07-14 56 views
1

我想自动添加字段到已经创建的数据透视表。这些字段将是“期间1的总和”...“期间360的总和”。我已经有了1-60的时间,但是我错过了61-360。手动拖放300次将是一件痛苦的事情。所以我写了一个宏,但我得到的错误: 无法既然已经创建了数据透视表,以获得透视字段类数据透视表展开“值”VBA

的支点项目性质(这是一个大表有许多格式的怪癖),我不不想改变任何事情。我只是想把期间加上period61-period360的值。

我附上我的代码。任何人可以给我的帮助将非常感谢,因为我不知道我做错了什么,我试图不要太沮丧。

非常感谢您提前。

这里是我的代码:

'--------------------- Expand_Pivot_to_360M Macro-------------------' 

Sub Expand_Pivot_to_360M() 

' Setting Pivot field classes to the "unable to get pivot items property of the pivot field class" error 
    Sheets("Monthly Summary").Select 

    With ActiveSheet.PivotTables("PivotTable1").PivotFields("universe") 
     .Orientation = xlRowField 
     .Position = 1 
    End With 
    With ActiveSheet.PivotTables("PivotTable1").PivotFields("buckets_break") 
     .Orientation = xlRowField 
     .Position = 2 
    End With 
    With ActiveSheet.PivotTables("PivotTable1").PivotFields("pool_name") 
     .Orientation = xlRowField 
     .Position = 3 
    End With 
    With ActiveSheet.PivotTables("PivotTable1").PivotFields("gl_company_code") 
     .Orientation = xlRowField 
     .Position = 4 
    End With 
    With ActiveSheet.PivotTables("PivotTable1").PivotFields("LEP") 
     .Orientation = xlRowField 
     .Position = 5 
    End With 

循环展开Pivit 36​​0期

' Using a Loop to Expand Pivot for 360 periods 
    Dim i As Integer 

     For i = 61 To 360  ' start at period 61 since periods 1 to 60 already include in pivot 

      Sheets("Monthly Summary").Select 
      ActiveSheet.PivotTables("PivotTable1").AddDataField ActiveSheet.PivotTables(_ 
       "PivotTable1").PivotFields("Period_i"), "Sum of Period_i", xlSum 
      With ActiveSheet.PivotTables("PivotTable1").PivotFields("Sum of Period_i") 
       .Caption = "Count of Period_i" 
       .Function = xlCount 
      End With 
      With ActiveSheet.PivotTables("PivotTable1").PivotFields("Count of Period_i") 
       .Caption = "Sum of Period_i" 
       .Function = xlSum 
      End With 

     Next i 

End Sub 
+0

取代'_i“'和'_”&i' – Slai

+0

谢谢你,我这样做,而不再得到“无法获得枢纽项目属性.. 。“错误,但我确实得到了另一个错误:应用程序定义或对象定义的错误”。请让我知道如果你能帮助,任何想法来解决这个问题?谢谢 –

回答

0

你有很多的来自宏录制生成的多余的代码。此外,您可能会收到“应用程序定义或对象定义的错误”消息,因为您试图添加的一个或多个字段已经存在。

我建议这个...

Dim i as Integer 
Dim found as Boolean 
Dim aPItem as PivotItem 
With Sheets("Monthly Summary").PivotTables("PivotTable1") 
    For i = 61 to 360 
     found = false 
     For Each aPItem In .DataPivotField.PivotItems 'Check field not already there 
      If aPItem.Caption = "Sum of Period_" & i Then 
       found = True 
       Exit For 
      End If 
     Next aPItem 

     If Not found then 'add field 
      .AddDataField .PivotFields("Period_" & i), "Sum of Period_" & i, xlSum 
     End If 
    Next i 
End With