2015-08-28 133 views
0

我有一個奇怪的錯誤與Excel vba。我試圖將數據透視表中的可見性設置爲false。我的代碼在一個虛擬表上工作正常,但它在我的真實表上返回一個錯誤(1004)。Excel VBA錯誤1004無法設置可見性

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

(無法設置PivotItem類的Visible屬性)

+0

嘗試之前'RefreshTable'加入'pt.PivotCache.MissingItemsLimit = xlMissingItemsNone'時,你應該始終貫徹這一邏輯。 – BrakNicku

回答

0

也許這會幫助你:

unable to set the visible property of the pivotitem class

Excel中有時不會從pivotcache上刪除舊條目哪些數據透視表基於。在那裏某些項目可能在那裏不是在源數據,但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