Excel VBA错误1004无法设置可见性

时间:2015-08-28 08:38:09

标签: excel vba excel-vba

我对excel vba有一个奇怪的错误。我试图在数据透视表中为日期值设置可见性为false。我的代码在虚拟表上工作正常,但它在我的真实表上返回错误(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属性)

2 个答案:

答案 0 :(得分:0)

也许这会对你有所帮助:

unable to set the visible property of the pivotitem class

  

Excel有时不会从数据透视表所基于的pivotcache中删除旧条目。在某些项目可能存在于源数据中但是excel将其保留在缓存中以进行优化。刷新缓存不能解决问题。只能这样做删除缓存并重新创建它。

答案 1 :(得分:0)

你应该总是选择true循环,然后选择false循环。原因是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时始终实现此逻辑