2016-11-20 62 views
1

我正在编写代码以循环访问数据透视表中的每个数据透视表字段,然后根据源名称更改“自定义名称”。当我记录更改列标题我收到下面的代码:使用VBA在数据透视表中根据源名称更改列标题

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 

上面的代码接收错误:“运行时间错误'0123':pf.Caption行上的'无效过程调用或参数'。

我也尝试使用pf.LabelRange,以及和我收到的错误:“运行时错误‘1004’:无法获取透视字段类的LabelRange财产”

我一直在寻找周围试图找到解决方案我没有用数据透视表编写太多的代码,所以我不知道我是否应该使用透视项目?我发现所有代码都改变了列标题,它基于前面的标题名称。

回答

0

几次修改代码后,我解决了这个问题。只要发布以防任何人有类似的问题。而不是循环通过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,我很好奇,想知道发表评论!