Обновить сводную дату таблицы - PullRequest
1 голос
/ 05 июня 2019

Мне нужно изменить следующий код, чтобы обновить сводную таблицу и изменить фильтр даты, каждый конец месяца у меня есть новый элемент в моем фильтре дат, например, в этом месяце 20190531, предыдущий элемент 20190430, мне нужно отменить выбор 20190430 и выберите 20190531 в следующем месяце. Мне нужна та же ситуация, но я отменил выбор 20190531 и выберите новый элемент 20190630 ... Мне нужно, чтобы эта динамика не менялась вручную каждый месяц

Sub PivotBraunRefresh()

    Sheets("Report-Inv-Actual").Select
    With ActiveSheet.PivotTables("PivotTable1").PivotFields("Dt")
        .PivotItems("20190430").Visible = False
        .PivotItems("20190531").Visible = True
    End With

End Sub 

1 Ответ

0 голосов
/ 05 июня 2019

Вы должны построить строку с последним днем ​​текущего месяца,
проверить, если такой PivotItem существует,
установить его видимость в true (так как всегда должен быть виден хотя бы 1 стержень)
, а затем переберите все остальные сводные элементы и сделайте их невидимыми:

Sub PivotBraunRefresh()
    Dim pi As PivotItem
    Dim strMonthEnd As String

    ' last day of current month as string
    strMonthEnd = Format(DateSerial(Year(Date), Month(Date), 1) - 1, "YYYYMMDD")

    ' refresh pivottable
    Sheets("Report-Inv-Actual").PivotTables("PivotTable1").PivotCache.Refresh

    With Sheets("Report-Inv-Actual").PivotTables("PivotTable1").PivotFields("Dt")
        On Error Resume Next
        ' check, if pivotfield exists
        Set pi = .PivotItems(strMonthEnd)
        On Error GoTo 0
        If Not pi Is Nothing Then
            pi.Visible = True
            For Each pi In .PivotItems
                If pi.Name <> strMonthEnd Then pi.Visible = False
            Next pi
        End If
    End With
End Sub

Если вы хотите еще больше автоматизировать это, вы можете поместить его в свою подпрограмму Workbook_Open().

...