Выбор последних 3 значений (недель) в сводной таблице, но без "пробела" с VBA
У меня есть отчет, содержащий несколько сводных таблиц.
Я нашел макрос ниже, который выбирает количество требуемых недель (в моем случае мне всегда нужно выбирать последние 3 недели) в одной из сводных таблиц. Он выбирает последние 3 значения, но проблема в том, что он также выбирает пустое поле.
Код выглядит следующим образом:
Sub ShowLastXWeeks()
Dim pi As PivotItem
Dim lLoop As Long
Dim pt As PivotTable
Dim lCount As Long
Dim lWeeks As Long
On Error Resume Next
lWeeks = 3
If lWeeks = 0 Then Exit Sub
Application.ScreenUpdating = False
Set pt = ActiveSheet.PivotTables("PivotTable1")
For Each pi In pt.PivotFields("Week").PivotItems
pi.Visible = False
Next pi
With pt.PivotFields("Week")
For lLoop = .PivotItems.Count To 1 Step -1
.PivotItems(lLoop).Visible = True
lCount = lCount + 1
If lCount = lWeeks Then Exit For
Next lLoop
End With
On Error GoTo 0
Application.ScreenUpdating = True
End Sub
Моя сводная таблица выглядит следующим образом:
Я пытался избавиться от "пустого" значения, но безуспешно.
Как я могу изменить приведенный выше скрипт, чтобы пропустить "пустое" поле и выбрать только последние 3 недели?
Заранее спасибо.
1 ответ
Я нашел решение своей собственной проблемы, поэтому я надеюсь, что помогу кому-либо еще, кто борется с той же проблемой. Я избавился от "пустого" значения, добавив ниже в мой код:
Set pf = pt.PivotFields("Week")
With pf
On Error Resume Next
.PivotItems("(blank)").Visible = False
On Error GoTo 0
End With
Весь код выглядит следующим образом:
Sub ShowLastXWeeks()
Dim pi As PivotItem
Dim lLoop As Long
Dim pt As PivotTable
Dim lCount As Long
Dim lWeeks As Long
On Error Resume Next
lWeeks = 4
If lWeeks = 0 Then Exit Sub
Application.ScreenUpdating = False
Set pt = ActiveSheet.PivotTables("PivotTable1")
For Each pi In pt.PivotFields("Week").PivotItems
pi.Visible = False
Next pi
With pt.PivotFields("Week")
For lLoop = .PivotItems.Count To 1 Step -1
.PivotItems(lLoop).Visible = True
lCount = lCount + 1
If lCount = lWeeks Then Exit For
Next lLoop
End With
On Error GoTo 0
Set pf = pt.PivotFields("Week")
With pf
On Error Resume Next
.PivotItems("(blank)").Visible = False
On Error GoTo 0
End With
Application.ScreenUpdating = True
End Sub
Спасибо