如何跳过Excel中的数据透视表中的空白页面

由于未来的增加,我的数据透视表的源数据范围比我现有的数据更长。 对于这个重做,在数据透视表filter中,我有一个名为“空白”的PivotItem。

下面的代码每次都改变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 

两点build议:

  1. 从实际数据源dynamic确定填充单元格的范围,然后更改数据透视表上的数据源以匹配。

比如,说你通过VBA确定的activeRange是Sheet1!A1:M2555:

 pivF.ChangePivotCache ActiveWorkbook.PivotCaches.Create( _ SourceType:=xlDatabase, SourceData:=activeRange) 
  1. 更好的select,如果可以,将源数据更改为一个表(又名ListObject),然后将ListObject作为数据源,而不是标准范围。 当内容被改变时,ListObjects更好地dynamicresize。 这可能不需要扩展您的范围,以包括空行开始。

例:

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

或者,您可以在devise时将表格作为源代码