2016-11-20 1 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 

위의 코드는 오류가 수신 : 나는 그러나, 나는 그것이 캡션을 수정하려고 시도 오류 메시지가 성공적으로 각 피벗 필드를 통해 루프 소스를 식별하는 코드를 작성 '5': 잘못된 프로 시저 호출 또는 인수 "pf.Caption 줄에.

나는 또한뿐만 아니라 pf.LabelRange를 사용하려고하고 난 오류가 나타납니다 : "런타임 오류 '1004'다음 PivotField 클래스의 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, 내가 알고 궁금 이유에 댓글을 달 수 있다면!

관련 문제