Как пропустить пустую страницу в сводной таблице в Excel

#excel #vba

#excel #vba

Вопрос:

Диапазон исходных данных моей сводной таблицы длиннее, чем мои существующие данные, из-за будущего добавления. По этой причине в фильтре сводной таблицы у меня есть сводный элемент с именем «Пустой».

Приведенный ниже код каждый раз изменяет сводный элемент, а затем печатает его, затем следующий элемент и так далее.

Проблема: он также печатает «Пустой» сводный элемент, в котором нет информации. Вот почему для подсчета страниц я добавил «-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 " amp; i amp; " von " amp; pivF.PivotItems.Count - 1
        ActiveWindow.SelectedSheets.PrintOut
Next pivI

Application.ScreenUpdating = True

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

Ответ №1:

Два предложения:

  1. Динамически определите диапазон заполненных ячеек из фактического источника данных, а затем измените источник данных в сводной таблице, чтобы он соответствовал.

Скажем, например, что activeRange вы определили через VBA как Лист1!A1: M2555:

 pivF.ChangePivotCache ActiveWorkbook.PivotCaches.Create( _
     SourceType:=xlDatabase, SourceData:=activeRange)
  
  1. Лучший вариант, если вы можете, измените исходные данные на таблицу (она же ListObject), а затем сделайте ListObject источником ваших данных, а не стандартным диапазоном. ListObjects лучше динамически изменять размеры при изменении содержимого. Это может исключить необходимость расширения диапазона для включения пустых строк для начала.

Пример:

 Dim tab as ListObject
Set tab = ws.ListObjects("Table1")

pivF.ChangePivotCache ActiveWorkbook.PivotCaches.Create( _
     SourceType:=xlDatabase, SourceData:=tab)
  

Или вы могли бы просто сделать таблицу источником во время разработки

Комментарии:

1. Спасибо Hambone. Форматирование исходных данных в виде таблицы было самым простым решением.