2015-12-22 3 views
1

В настоящее время я работаю над набором кода для установки фильтра сводной таблицы на определенный диапазон дат. В приведенном ниже кодере диапазон дат составляет от 12/7/2015 по 12/22/2015. В данных имеются только даты 12/7,8,11,18. Код будет правильно отмечать эти элементы в файле, опуская и датированные до 12/7 по назначению, но каким-то образом он вытаскивает дату 12/21/2015, а затем дает мне ошибку времени выполнения в строке кода Bolded. В моих данных вообще нет 12/21/2015. Это также говорит о том, что pi.visible должен быть ложным, и я думаю, что здесь происходит ошибка, потому что нет 12/21/2015, чтобы он отображался как видимый или нет. Любой совет?Ошибка при запуске 1004 при сравнении значений элементов поворота

Dim ws As Worksheet, pt As PivotTable, pf As PivotField, pi As PivotItem 
Dim dCurrentDate As Date, dPastDate As Date 

dCurrentDate = Date 
dPastDate = Date - 15 

Set ws = Sheets("Sheet2") 
Set pt = ws.PivotTables("PivotTable1") 
Set pf = pt.PivotFields("Date") 

With pf 
    .ClearAllFilters 
    For Each pi In pf.PivotItems 
    If pi.Value = "(blank)" Then 
    Else 
     If pi.Value <= dCurrentDate And pi.Value >= dPastDate Then 
      **pi.Visible = True** 
     Else 
      pi.Visible = False 
     End If 
    End If 
    Next 
End With 
+1

'PivotTableOptions> Данные'. Убедитесь, что «Сохранять элементы, удаленные из источника данных»> «Количество элементов для сохранения в поле»: «установлено на ** Нет **. В противном случае кеш сохранит старые значения из прошлого, которые, возможно, были там сохранены, и проверит их в ваших значениях, даже если вы не видите их в своих данных. –

+1

@ScottHoltzman - Большое спасибо. Это решило ошибку, с которой я столкнулся. – Emmerson

ответ

0

Код не нуждается в каких-либо конкретных датах, он проверяет диапазон. Я не получил ошибку, но ее можно упростить, нет необходимости проверять пустоту.

Dim ws As Worksheet, pt As PivotTable, pf As PivotField, pi As PivotItem 
Dim dCurrentDate As Date, dPastDate As Date 

    dCurrentDate = Date 
    dPastDate = Date - 15 

    Set ws = Sheets("Sheet2") 
    Set pt = ws.PivotTables("PivotTable1") 
    Set pf = pt.PivotFields("Date") 

    With pf 
     .ClearAllFilters 
     For Each pi In pf.PivotItems 

      pi.Visible = Trim(pi.Value) <= dCurrentDate And Trim(pi.Value) >= dPastDate 
     Next 
    End With 
+1

со всем уважением, на самом деле это не дает ответа на вопрос пользователя, он просто реорганизовывает свой код, чтобы сделать его более простым/удобочитаемым. –

Смежные вопросы