VBA - Совершенно новый для VBA Борьба за фильтрацию сводной таблицы .pivotitems на основе ячейки, содержащей время и дату - PullRequest
0 голосов
/ 05 января 2019

Я очень новичок в VBA и врезался в стену. Я пытаюсь автоматизировать использование 15 сводных таблиц (в этом примере только одна тестовая). Когда я делаю это вручную, я ввожу «мм / гггг» в поле поиска сводной таблицы и получаю возврат элементов за данный месяц. (Как видно на скриншоте)

Следующий код корректно фильтруется, если я сосредотачиваюсь на столбце Letter или числовом столбце, но если я пытаюсь сосредоточиться на времени создания дела / отформатированной дате, я получаю «Невозможно получить свойство pivotitem класса pivotfield»

Я полагаю, это связано с тем, что дата и время объединены или потому, что данные не являются "Чистыми".

Приветствуются любые очень простые указатели, которые вы можете дать.

Спасибо

Код:

Sub DateFilterPivotWithSlicer()

Dim p_i As PivotItem

ActiveSheet.PivotTables("PivotTable2").ClearAllFilters

ActiveSheet.PivotTables("PivotTable2").PivotFields ("FormattedDate")

    With ActiveSheet.PivotTables("PivotTable2").PivotFields("FormattedDate")
        .PivotItems("24/08/2018").Visible = True
        For Each p_i In .PivotItems
            ' If loop here will cycle through all items in the pivot table and then pass to next
            If p_i.Name <> "24/08/2018" Then
            p_i.Visible = False

            End If
        Next
    End With


End Sub

Тестовые данные, с которыми я работаю: Test Data I am working with

1 Ответ

0 голосов
/ 05 января 2019

Попробуйте

Sub DateFilterPivotWithSlicer()

Dim p_i As PivotItem
Dim pv As PivotTable
Dim Ws As Worksheet
Dim sFind As String, s As String
Dim d As Long

Set Ws = ActiveSheet

Set pv = Ws.PivotTables("PivotTable2")
'Set pv = Ws.PivotTables(1)
pv.ClearAllFilters

    With pv.PivotFields("FormattedDate")
        sFind = "08/2018"
        sFind = Replace(sFind, "/", "-")

        For Each p_i In .PivotItems
            s = p_i.Name
                d = DateValue(p_i.Name)
                s = Format(d, "mm/yyyy") 's result 08-2018
            ' If loop here will cycle through all items in the pivot table and then pass to next
            If s = sFind Then
                p_i.Visible = True
            Else
                p_i.Visible = False
            End If
        Next
    End With
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...