#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:
Два предложения:
- Динамически определите диапазон заполненных ячеек из фактического источника данных, а затем измените источник данных в сводной таблице, чтобы он соответствовал.
Скажем, например, что activeRange
вы определили через VBA как Лист1!A1: M2555:
pivF.ChangePivotCache ActiveWorkbook.PivotCaches.Create( _
SourceType:=xlDatabase, SourceData:=activeRange)
- Лучший вариант, если вы можете, измените исходные данные на таблицу (она же ListObject), а затем сделайте ListObject источником ваших данных, а не стандартным диапазоном. ListObjects лучше динамически изменять размеры при изменении содержимого. Это может исключить необходимость расширения диапазона для включения пустых строк для начала.
Пример:
Dim tab as ListObject
Set tab = ws.ListObjects("Table1")
pivF.ChangePivotCache ActiveWorkbook.PivotCaches.Create( _
SourceType:=xlDatabase, SourceData:=tab)
Или вы могли бы просто сделать таблицу источником во время разработки
Комментарии:
1. Спасибо Hambone. Форматирование исходных данных в виде таблицы было самым простым решением.