Фильтр поворотный в Excel 2003 - PullRequest
1 голос
/ 27 января 2012

Как мне отфильтровать сводную таблицу в Excel 2003 с помощью VBA?

В Excel 2007 я могу запустить этот макрос, но PivotFilters не реализованы в XL 2003.

Dim ws As Worksheet: Set ws = Sheets("Sheet1")
ws.PivotTables("PivotTable1").PivotFields("Date").PivotFilters.Add _
        Type:=xlSpecificDate, Value1:="26/01/2012"

Обновление:Я получаю сообщение об ошибке «Ошибка выполнения 1004».Невозможно установить свойство Visible класса PivotItem.

Sub Filter () Dim PvtItem As PivotItem Dim ws As Worksheet

Set ws = Sheets("pivot")

'~~> Show All
For Each PvtItem In ws.PivotTables("PivotTable1").PivotFields("Date").PivotItems
    PvtItem.Visible = True
Next

'~~> Show Only the relevant
For Each PvtItem In ws.PivotTables("PivotTable1").PivotFields("Date").PivotItems
    If PvtItem.Value <> "26/01/2012" Then PvtItem.Visible = False  '<-- error here
Next

Конец Sub

http://wikisend.com/download/426518/pivot.xls

1 Ответ

2 голосов
/ 28 января 2012

Чтобы отфильтровать PivotField в VBA 2003, вы должны установить / отменить свойство .Visible.вот пример

Option Explicit

Sub Filter()
    Dim PvtItem As PivotItem
    Dim ws As Worksheet

    On Error GoTo Whoa1

    Set ws = Sheets("pivot")

    '~~> Show All
    For Each PvtItem In ws.PivotTables("PivotTable1").PivotFields("Date").PivotItems
        PvtItem.Visible = True
    Next

    On Error GoTo Whoa2 '<~~ If no match found in Pivot

    '~~> Show Only the relevant
    For Each PvtItem In ws.PivotTables("PivotTable1").PivotFields("Date").PivotItems
        If Format(PvtItem.Value, "DD/MM/YYYY") <> Format(Range("today"), "DD/MM/YYYY") Then
            PvtItem.Visible = False
        End If
    Next

    Exit Sub
Whoa1:
    MsgBox Err.Description
    Exit Sub
Whoa2:
    '~~> Show All
    For Each PvtItem In ws.PivotTables("PivotTable1").PivotFields("Date").PivotItems
        PvtItem.Visible = True
    Next
End Sub
...