Написал макрос который должен фильтровать фильтр сводной таблицы на основе даты из ячейки E4
Код
Sub FLTRDT()
ActiveSheet.PivotTables("freshnees_tbl").ClearAllFilters
On Error Resume Next
ActiveSheet.PivotTables("freshnees_tbl").PivotCache.Refresh
On Error Resume Next
Dim pf233 As PivotField
On Error Resume Next
Set pf233 = ActiveSheet.PivotTables("freshnees_tbl").PivotFields("Дата ИО")
On Error Resume Next
pf233.ClearAllFilters
On Error Resume Next
pf233.CurrentPage = CDate(Range("E4").Value)
End Sub
но почему то ничего не получается и значению ячейки для фильтра установил CDate, но ничего не происходит. В чем может быть проблема ?
On Error Resume Next действует на всю процедуру, не надо повторять это после каждой строки. CurrentPage здесь вообще не к месту. Попробйте записать фильтрацию макрорекордером и посмотрите на код.
pinguindell, Вы не учли две вещи. 1. В E4 дата отображается с коротким годом (16), а внутри Excel'я год в виде 2016. А в фильтре год короткий. 2. В фильтре даты отображаются с точкой, а внутри Excel'я даты со слешами. Это можно увидеть, применив такой код:
Код
Sub jjj()
Dim pf233 As PivotField
Set pf233 = ActiveSheet.PivotTables("freshnees_tbl").PivotFields("Дата ИО")
Debug.Print pf233.PivotItems(1).Caption
End Sub
Новый макрос. В фильтре уберите флажок "Выделить несколько элементов".
Код
Sub FLTRDT()
Dim pf233 As PivotField
'удаление несуществующих данных, которые раньше были в таблице с данными
ActiveSheet.PivotTables("freshnees_tbl").PivotCache.MissingItemsLimit = xlMissingItemsNone
ActiveSheet.PivotTables("freshnees_tbl").PivotCache.Refresh
Set pf233 = ActiveSheet.PivotTables("freshnees_tbl").PivotFields("Дата ИО")
pf233.CurrentPage = Replace(Format(Range("E4").Value, "dd.mm.yy"), ".", "/")
End Sub