2016-11-20 95 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,我很好奇,想知道發表評論!