Как отфильтровать сводную таблицу, чтобы включить только даты с 2019 года (множественный выбор) - PullRequest
0 голосов
/ 21 февраля 2019

У меня есть код vba для создания сводной таблицы, но я хотел бы отфильтровать даты в 2019 году (часть «запланированная дата поставки»).

'create pivot table
Set pvt2 = pvtcache.CreatePivotTable(TableDestination:=startpvt, TableName:="PivotTable2")

pvt2.PivotFields("Scheduled Ship Date").Orientation = xlRowField
With pvt2.PivotFields("Week")
        .Orientation = xlPageField
        .Position = 1
End With

With pvt2.PivotFields("Item Type")
        .Orientation = xlPageField
        .Position = 2
End With

With pvt2.PivotFields("Quantity Ordered")
        .Orientation = xlDataField
End With

    pvt2.PivotFields("Item Type").ClearAllFilters
    ActiveSheet.PivotTables("PivotTable2").PivotFields("Item Type").CurrentPage = "KIT"

pvt2.PivotFields("Week").ClearAllFilters
    ActiveSheet.PivotTables("PivotTable2").PivotFields("Week").CurrentPage = Cells(2, 2).Value

End Sub

Ответы [ 2 ]

0 голосов
/ 21 февраля 2019

Ваша «Дата отправки по расписанию» содержит отдельные даты, и вы хотите использовать ее в качестве фильтра.

Затем вы можете либо показать CurrentPage (это только отдельная дата и считается нежелательной), либо выпереключите видимость каждого PivotItem следующим образом:

With pvt2.PivotFields("Scheduled Ship Date")
    .Orientation = xlPageField
    .Position = 1
End With

With pvt2.PivotFields("Item Type")
    .Orientation = xlPageField
    .Position = 2
End With

With pvt2.PivotFields("Quantity Ordered")
    .Orientation = xlDataField
End With

pvt2.PivotFields("Item Type").ClearAllFilters
pvt2.PivotFields("Item Type").CurrentPage = "KIT"

Dim pi As PivotItem
pvt2.PivotFields("Scheduled Ship Date").ClearAllFilters
pvt2.PivotFields("Scheduled Ship Date").EnableMultiplePageItems = True
For Each pi In pvt2.PivotFields("Scheduled Ship Date").Pivotitems
    If Year(pi.Value) <> 2019 Then pi.Visible = False
Next pi

Имейте в виду, что хотя бы один элемент должен оставаться видимым, поэтому, если у вас нет даты с 2019 года, вы получите ошибку.


Фильтры даты работают только с полями строки или столбца (НЕ в вышеупомянутом решении, где значения даты являются полем страницы).Если вы добавите «Дата отправки по расписанию» в качестве поля строки, можно использовать либо:

pvt2.PivotFields("Scheduled Ship Date").PivotFilters.Add2 _
    Type:=xlDateThisYear

, либо следующее:

pvt2.PivotFields("Scheduled Ship Date").PivotFilters.Add2 _
    Type:=xlDateBetween, _
    Value1:="01.01.2019", _
    Value2:="31.12.2019", _
    WholeDayFilter:=True
0 голосов
/ 21 февраля 2019

Измените приведенный ниже код, изменив Имя сводной таблицы , Столбец сводной таблицы , Имя листа и попробуйте:

Option Explicit

Sub test()

    Dim pf As PivotField

    With ThisWorkbook.Worksheets("Sheet1")

        Set pf = ActiveSheet.PivotTables("pvtTest").PivotFields("Year")

        pf.ClearAllFilters

        pf.CurrentPage = "2019"

    End With

End Sub
...