2015-08-28 2 views
0

У меня есть странная ошибка с excel vba. Я пытаюсь установить видимость на ложь внутри сводной таблицы для значений даты. Мой код отлично работает на фиктивной таблице, но он возвращает ошибку (1004) на моей реальной таблице.Excel VBA Error 1004 can not set visibility

Sub MultiItemPivotFilter2() 
Dim PI As PivotItem 


Sheets("Pivot_stocks_1").PivotTables("Pivot_Stocks_1").RefreshTable 


For Each PI In Sheets("Pivot_stocks_1").PivotTables("Pivot_Stocks_1").PivotFields("date2").PivotItems 


If DateValue(PI.Name) < DateValue(Sheets("Pivot_stocks_1").Range("J13").Value) Then 

      PI.Visible = False 
      Else 
       PI.Visible = True 
      End If 

    Next PI 
End Sub 

Ошибка возникает в строке PI.Visible = False

(Невозможно установить Visible свойство класса PivotItem)

+0

Попробуйте добавить 'pt.PivotCache.MissingItemsLimit = xlMissingItemsNone' перед тем' RefreshTable'. – BrakNicku

ответ

0

Может быть, это поможет вам:

unable to set the visible property of the pivotitem class

Excel иногда не удаляет старые записи из pivotcache on на которой основана сводная таблица. В этом случае может существовать какой-то элемент, который не находится в исходных данных, но excel хранит его в кэше для оптимизации. Устранение кеша не решает проблему. Единственный способ - удалить кеш и воссоздать его.

+0

Ошибка не устранена. Может быть, есть еще одна причина? – user3614882

+0

Я читал, что это может быть связано с ориентацией –

0

Вы всегда должны делать свой выбор истинной петли, а затем делать выбор ложного цикла. Причина в том, что Excel делает их по одному за раз и не позволит вам иметь все, что скрыто в сводной таблице, он выдаст ошибку (или что там у вас) так:

Sub MultiItemPivotFilter2() 
    Dim PI As PivotItem 

    With Sheets("Pivot_stocks_1").PivotTables("Pivot_Stocks_1") 
     .RefreshTable 

     'Loop first setting all to "True" 
     For Each PI In .PivotFields("date2").PivotItems 
      PI.Visible = True 
     Next PI 

     'Loop then setting any "False" 
     For Each PI In .PivotFields("date2").PivotItems 
      If DateValue(PI.Name) < DateValue(Sheets("Pivot_stocks_1").Range("J13").Value) Then 
       PI.Visible = False 
      End If 
     Next PI 
    End With 
End Sub 

Надежда, что имеет смысл!

Редактировать

Даже если это не исправить вашу проблему, вы всегда должны реализовать эту логику, когда скрывается pivotItems

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