2016-10-18 11 views
1

피벗 테이블의 원본 데이터 범위가 향후 기존 데이터보다 길어집니다. 이 reaon을 위해 피벗 테이블 필터에서 "공백"이라는 PivotItem이 있습니다.Excel의 Pivottable에서 빈 페이지를 건너 뛰는 방법

아래 코드는 PivotItem을 변경할 때마다 다음 항목을 인쇄하는 식으로 계속됩니다.

문제점 : 정보가없는 "공백"PivotItem도 인쇄됩니다. 계산 페이지에 내가 추가 한 이유 "-1"라인에 pivF.PivotItems.Count - 1

질문 : 사람은 빈 페이지를 건너 뛰려면 아래의 코드를 수정하는 데 도움이 수 (또는 아무도 내가 그 제거 할 수있는 방법을 말해 줄 수 빈 PivotItem).

Private Sub CommandButton3_Click() 
With ActiveSheet.PageSetup 
.Zoom = False 
.FitToPagesWide = 1 
.FitToPagesTall = 1 
End With 

Dim pivF As PivotField, pivI As PivotItem, i As Integer 
Set pivF = ActiveSheet.PivotTables("Leistungsnachweise").PivotFields("Tour") 

Application.ScreenUpdating = False 
i = 0 
For Each pivI In pivF.PivotItems 
     pivF.CurrentPage = pivI.Name 
     i = i + 1 
     Range("M2").Value = "Seite " & i & " von " & pivF.PivotItems.Count - 1 
     ActiveWindow.SelectedSheets.PrintOut 
Next pivI 

Application.ScreenUpdating = True 

ActiveSheet.PivotTables("Leistungsnachweise").PivotFields("Tour").CurrentPage = 1 
End Sub 

답변

2

두 가지 제안 :

  1. 동적으로 실제 데이터 소스에서 인구가 셀 범위를 확인한 다음 일치하도록 피벗 테이블의 데이터 소스를 변경할 수 있습니다.

말, 예를 들어, 당신은 Sheet1의 A1으로 VBA를 통해 결정된 activeRange 것을! M2555은 : 변화 할 수 있다면

pivF.ChangePivotCache ActiveWorkbook.PivotCaches.Create(_ 
    SourceType:=xlDatabase, SourceData:=activeRange) 
,
  • 더 나은 옵션
      소스 데이터를 테이블 (일명 ListObject)에 저장 한 다음 ListObject를 표준 범위가 아닌 데이터 원본으로 만듭니다. ListObject는 내용이 변경 될 때 동적으로 크기를 조정할 때 더 좋습니다. 빈 행을 포함하도록 범위를 확장해야 할 필요가 없습니다.

    예 : 당신은 그냥 테이블 설계 시간

  • +0

    감사 Hambone에서 소스 만들 수

    Dim tab as ListObject Set tab = ws.ListObjects("Table1") pivF.ChangePivotCache ActiveWorkbook.PivotCaches.Create(_ SourceType:=xlDatabase, SourceData:=tab) 

    또는. 원본 데이터를 표로 형식화하는 것이 가장 쉬운 방법이었습니다. – Dio