Выбор последних 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

Спасибо

Другие вопросы по тегам