Как фильтровать сводные элементы с диапазоном дат в Excel VBA - PullRequest
0 голосов
/ 20 сентября 2018

Мне нужна помощь в фильтрации элементов сводки с диапазоном дат.Элементы - это даты в формате ГГГГ-ММ-ДД между 2014 и 2018 годами. Я хотел бы, чтобы в сводной таблице были видны только элементы последних 12 месяцев.

Код, который я создал, сначала проверяет все элементы в раскрывающемся списке сводной таблицы.Затем он должен снять все пункты, которые не в пределах 12-месячного диапазона.

Проблема: код ничего не фильтрует, поэтому все элементы все еще видны.

Dim pivot As PivotItem
Dim currentMonth As Integer
Dim currentYear As Integer
currentMonth = Month(Date)
currentYear = Year(Date)

ActiveSheet.PivotTables("OEMI").RefreshTable
ActiveSheet.PivotTables("OEMI").PivotFields("Date sent to Coordinator").EnableMultiplePageItems = True

For Each pivot In ActiveSheet.PivotTables("OEMI").PivotFields("Date sent to Coordinator").PivotItems
        If Not (Year(pivot) = currentYear And Month(pivot) <= currentMonth) Or _
                (Year(pivot) = currentYear - 1 And Month(pivot) > currentMonth) Then
                    pivot.Visible = False

                Else
                'Do nothing and stay visible in the drop-down list
                End If
    Next pivot

РЕДАКТИРОВАТЬ ***************** Я использовал окно просмотра, чтобы увидеть значение и тип переменных, когда код проходит цикл For Each,Кажется, у меня проблема с несоответствием типов при использовании метода pivot.visible = true / false.Есть идеи, в чем может быть проблема? Окно просмотра

Фрагмент данных

Ответы [ 2 ]

0 голосов
/ 25 сентября 2018

Я нашел решение для отображения всех элементов за последние 12 месяцев.Я использовал числовое значение excel для дат и использовал его для фильтрации основных элементов.

'Define the pivot items
Dim pivot As PivotItem

'Refresh the pivot table
ActiveSheet.PivotTables("OEMI").RefreshTable 'VBA will now use the current pivot item rather than the previously cached _
                                              pivot items


'Add filters for "Date sent to Coordinator"
ActiveSheet.PivotTables("OEMI").PivotFields("Date sent to Coordinator").EnableMultiplePageItems = True 'Select Multiple Items

'Define the date variables
Dim CurrentDate As Long 'Convert the current date to excel numerical date
Dim LastYear As Long
LastYear = CurrentDate - 365 'Numerical value of the date 12 months ago

For Each pivot In ActiveSheet.PivotTables("OEMI").PivotFields("Date sent to Coordinator").PivotItems

    If CLng(pivot) >= LastYear Then
        pivot.Visible = True
    Else
        pivot.Visible = False
    End If

Next pivot

Это решение идеально подходит для применения сводной таблицы.Я не решил проблему как таковую, но я получаю то, что мне нужно.

Спасибо тем, кто нашел время, чтобы прочитать пост и попытаться помочь.

Хорошего дня!

0 голосов
/ 21 сентября 2018
DateFrom = DateAdd("yyyy", -1, Date)
DateTo = Date

ActiveSheet.PivotTables("OEMI").PivotCache.Refresh
ActiveSheet.PivotTables("OEMI").PivotFields("Date Sent to Coordinator").ClearAllFilters
ActiveSheet.PivotTables("OEMI").PivotFields("Date Sent to Coordinator").PivotFilters.Add Type:=xlDateBetween, Value1:=DateFrom, Value2:=DateTo

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...