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

时间:2016-10-18 11:01:08

标签: excel excel-vba vba

由于未来的添加,我的数据透视表的源数据范围比我现有的数据长。对于这个原因,在数据透视表过滤器中,我有一个名为“空白”的PivotItem。

以下代码每次更改PivotItem然后打印它,然后是下一个项目,依此类推。

问题:它还会打印“空白”数据透视表,它没有任何信息。这就是为什么在计算页面时我将“-1”添加到行pivF.PivotItems.Count - 1

问题:任何人都可以帮我修改下面的代码以跳过该空白页面(或者任何人都可以告诉我如何摆脱那个空白的数据透视图。)

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

1 个答案:

答案 0 :(得分:2)

两个建议:

  1. 动态确定实际数据源中已填充单元格的范围,然后更改数据透视表上的数据源以匹配。
  2. 比如说,你通过VBA确定的activeRange是Sheet1!A1:M2555:

    pivF.ChangePivotCache ActiveWorkbook.PivotCaches.Create( _
         SourceType:=xlDatabase, SourceData:=activeRange)
    
    1. 更好的选择,如果可以,将源数据更改为表(也称为ListObject),然后使ListObject成为数据源而不是标准范围。当内容被更改时,ListObjects更适合动态调整大小。这可能会排除扩展您的范围以包括空白行的需要。
    2. 示例:

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

      或者,您可以在设计时将表格作为源