Страницы: 1
RSS
Фильтрация дат в сводной таблице при помощи VBA, Вывод диапазона значений из указанных дат
 
[img]file:///C:/Users/DEMINDS/Desktop/table_1.jpg[/img]Доброго дня!
Есть желание автоматизировать рабочий процесс.
Имею в наличии сводную таблицу следующего типа (см. загруженный файл):
[img]file:///C:/Users/DEMINDS/Desktop/table_1.jpg[/img]
Я написал макрос, который брал бы данные из колонок "first day" "last day" и по ним фильровал таблицу.
Но к сожалению, макрос выдает ошибку
Код
Sub autofilter()
Dim StDate As Long: StDate = [H2]
Dim EndDate As Long: EndDate = [I2]
           Range("B1" & Rows.Count).autofilter DATE_PROLONGATION, ">=" & [H2].Value2, xlAnd, "<=" & [I2].Value2
End Sub

При исполнении макрос выдает ошибку "Method range of object"_global failed
Как можно исправить скрипт?
Изменено: santafox - 31.05.2018 14:38:36 (загрузи файл)
 
Цитата
santafox написал:
см. загруженный файл
скрин кода чтоль отправить...
можно примерно так. название сводной поменяйте на своё только
Код
Sub pivfltr()
Dim StDate As Date: StDate = [H2]
Dim EndDate As Date: EndDate = [I2]
Dim dt As Date
With ActiveSheet.PivotTables("PivotTable1").PivotFields("DATE_PROLONGATION")
For i = 1 To .PivotItems.Count
    dt = Format(.PivotItems(i), "mm.dd.yyyy")
    If dt < StDate Or dt > EndDate Then .PivotItems(i).Visible = False
Next
End With
End Sub
а может можно как-то проще..
 
yozhik,
Работает, огромное спасибо!
Есть только один момент, в выпадающем списке должны быть выбраны все даты, что бы скрипт отработался корректно.
Есть возможности для автоматического выделения всего диапазона?
 
Допишите в 8 строчке после False    Else .PivotItems(i).Visible=True
 
Цитата
yozhik написал: Допишите в 8 строчке после False    Else .PivotItems(i).Visible=True
Попробовал, не помогает.
Обновляю сводную таблицу (соответственно в date_prolongation попадают новые даты), запускаю скрипт, выдает ошибку "Run-time erro 1004 Нельзя утсновить свойство Visible класса PivotItem'/
Все еще помогате выбрать вручную все даты и запустить макрос.

UPD/
Вышел из ситуации:
Код
Sub pivottable1()
Sheets("PivotTable").PivotTables("PivotTable1").PivotCache.Refresh
Sheets("PivotTable").PivotTables("PivotTable1").PivotFields("DATE_PROLONGATION").ClearAllFilters
Dim StDate As Date: StDate = [N2]
Dim EndDate As Date: EndDate = [P2]
Dim dt As Date
With ActiveSheet.PivotTables("PivotTable1").PivotFields("DATE_PROLONGATION")
For i = 1 To .PivotItems.Count
    dt = Format(.PivotItems(i), "mm.dd.yyyy")
    If dt < StDate Or dt > EndDate Then .PivotItems(i).Visible = False Else .PivotItems(i).Visible = True
Next
End With
End Sub

Все работает. Еще раз спасибо!
Изменено: santafox - 04.06.2018 16:23:47
Страницы: 1
Наверх