12 개월 동안 매월 다양한 사람들을 대상으로 데이터를 정렬하는 피벗 테이블이 있습니다. 데이터가 생성 된 테이블에는 동적 날짜 범위가 있습니다 (즉, 사용자가 테이블을 통해 연속적으로 시작 날짜를 지정할 수 있음). 피벗 테이블 및 차트는 데이터 분석의 일부로이 마스터 테이블에서 생성됩니다. 지난 달이 도구를 만들었을 때 환상적인 일을했지만, 코드에서 하드 코딩 된 피벗 필드의 이름이 4 월의 달과 일치한다는 것을 깨달았습니다 (아래 참조). 5 월에 시작일부터 실행하려고하면 피벗 테이블이 끊어집니다. 피벗 테이블의 '피벗 필드'/ 데이터 입력란을 날짜 범위와 일치하도록 동적으로 만들려면 어떻게해야합니까?VBA 코드에서 내 피벗 필드를 동적으로 만드는 방법
관련 코드는 아래에서 찾을 수 있습니다. 예상대로 오류는 다음에서 발생합니다.
"Compare individuals").PivotFields("Apr-17"), "Sum of Apr-17", xlSum
ActiveSheet.PivotTables("Compare individuals").AddDataField
5 월부터 내 피벗 차트/보고서를 실행하려고 할 때.
정말 감사합니다!
Option Explicit
Sub CreatePivot()
Dim pt As PivotTable
Dim pf As PivotField
Dim pi As PivotItem
Dim pc As PivotCache
With ActiveWorkbook
For Each pc In .PivotCaches
pc.MissingItemsLimit = xlMissingItemsNone
Next pc
End With
'Generate base pivot chart
ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
"Indy", Version:=xlPivotTableVersion10). _
CreatePivotTable TableDestination:="'PivotSheet'!R8C6", TableName:="Compare individuals" _
, DefaultVersion:=xlPivotTableVersion10
Worksheets("PivotSheet").Activate
'Set Name and disc as field and filter respectively
With ActiveSheet.PivotTables("Compare individuals").PivotFields("Name")
.Orientation = xlRowField
.Position = 1
End With
With ActiveSheet.PivotTables("Compare individuals").PivotFields("Disc ")
.Orientation = xlPageField
.Position = 1
End With
'Add data; sums of each month per individual
ActiveSheet.PivotTables("Compare individuals").AddDataField ActiveSheet.PivotTables(_
"Compare individuals").PivotFields("Apr-17"), "Sum of Apr-17", xlSum
ActiveSheet.PivotTables("Compare individuals").AddDataField ActiveSheet.PivotTables(_
"Compare individuals").PivotFields("May-17"), "Sum of May-17", xlSum
ActiveSheet.PivotTables("Compare individuals").AddDataField ActiveSheet.PivotTables(_
"Compare individuals").PivotFields("Jun-17"), "Sum of Jun-17", xlSum
ActiveSheet.PivotTables("Compare individuals").AddDataField ActiveSheet.PivotTables(_
"Compare individuals").PivotFields("Jul-17"), "Sum of Jul-17", xlSum
ActiveSheet.PivotTables("Compare individuals").AddDataField ActiveSheet.PivotTables(_
"Compare individuals").PivotFields("Aug-17"), "Sum of Aug-17", xlSum
ActiveSheet.PivotTables("Compare individuals").AddDataField ActiveSheet.PivotTables(_
"Compare individuals").PivotFields("Sep-17"), "Sum of Sep-17", xlSum
ActiveSheet.PivotTables("Compare individuals").AddDataField ActiveSheet.PivotTables(_
"Compare individuals").PivotFields("Oct-17"), "Sum of Oct-17", xlSum
ActiveSheet.PivotTables("Compare individuals").AddDataField ActiveSheet.PivotTables(_
"Compare individuals").PivotFields("Nov-17"), "Sum of Nov-17", xlSum
ActiveSheet.PivotTables("Compare individuals").AddDataField ActiveSheet.PivotTables(_
"Compare individuals").PivotFields("Dec-17"), "Sum of Dec-17", xlSum
ActiveSheet.PivotTables("Compare individuals").AddDataField ActiveSheet.PivotTables(_
"Compare individuals").PivotFields("Jan-18"), "Sum of Jan-18", xlSum
ActiveSheet.PivotTables("Compare individuals").AddDataField ActiveSheet.PivotTables(_
"Compare individuals").PivotFields("Feb-18"), "Sum of Feb-18", xlSum
ActiveSheet.PivotTables("Compare individuals").AddDataField ActiveSheet.PivotTables(_
"Compare individuals").PivotFields("Mar-18"), "Sum of Mar-18", xlSum
ActiveSheet.PivotTables("Compare individuals").PivotFields("Disc ").CurrentPage = _
"(All)"
'Set data in columns
With ActiveSheet.PivotTables("Compare individuals").DataPivotField
.Orientation = xlColumnField
.Position = 1
End With
EDIT : 조금 더 많은 컨텍스트. 내 피벗 테이블은 다음과 같습니다
실제 데이터 테이블에 "4 월 17"가 없기 때문에 오류가 표면 상으로 나타
에있어서, 월/날짜 범위는 동적입니다 (초기 입력부터).
즉 상관없이 호출 무엇의 테이블에 모든 날짜 열을 넣어 : 내가 할 수있는 코드를 원하는 것은
이입니다.
시도주고, 데이터의 샘플은, 당신이 원하는 것을 달성하는 방법에 대한 이해를 수 –
@ShaiRado OP –