使用VBA根据数据透视表中的源名称更改列标题

我正在编写代码来循环透视表中的每个透视字段,然后根据源名称更改“自定义名称”。 当我logging更改列标题时收到以下代码:

Range("J5").Select ActiveSheet.PivotTables("PivotTable1").PivotFields("Man-Hours Oct-16").Caption _ = "Man-Hours Nov-16" 

问题是,自定义名称更改月份,所以我想引用基于名称,而不是标题的透视字段。 我编写了一个代码,它成功地遍历每个数据透视表字段并标识源代码,但是,当它试图修改标题时,我收到一条错误消息:

 Dim CurrentDate As Date Dim CurrentMonth As String Dim CurrentYear As String Dim pf as PivotField CurrentDate = Range("CurrentDate") CurrentMonth = Format(CurrentDate, "MMM") CurrentYear = Format(CurrentDate, "YY") For Each pf In PivotSheet.PivotTables("PivotTable1").PivotFields 'Total Forecast If pf.SourceName = "Man-Hours 0" Then pf.Caption = "Man-Hours " & CurrentMonth & "-" & CurrentYear ElseIf pf = "Cost ($$) 0" Then pf.Caption = "Cost ($$) " & CurrentMonth & "-" & CurrentYear End If Next pf 

上面的代码在pf.Caption行收到错误:“运行时错误”5:“无效的过程调用或参数”。

我也试图使用pf.LabelRange以及我收到错误:“运行时错误”1004“:无法获取PivotField类的LabelRange属性”

我一直在寻找解决办法。 我没有写太多的数据透视表的代码,所以我不知道如果我应该使用透视项目? 所有的代码,我发现改变列标题是基于前面的标题名称。

几次修改代码后,我解决了这个问题。 只要张贴,以防有人有类似的问题。 而不是通过数据PivotFields循环,我应该通过DataFields循环。 以下修改的代码工作:

 Dim CurrentDate As Date Dim CurrentMonth As String Dim CurrentYear As String Dim pf as PivotField CurrentDate = Range("CurrentDate") CurrentMonth = Format(CurrentDate, "MMM") CurrentYear = Format(CurrentDate, "YY") For Each pf In PivotSheet.PivotTables("PivotTable1").DataFields 'Total Forecast If pf.SourceName = "Man-Hours 0" Then pf.Caption = "Man-Hours " & CurrentMonth & "-" & CurrentYear ElseIf pf.SourceName = "Cost ($$) 0" Then pf.Caption = "Cost ($$) " & CurrentMonth & "-" & CurrentYear End If Next pf 

如果有人可以评论为什么DataFields工作,而不是数据PivotFields ,我PivotFields知道!