我对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属性)
答案 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时始终实现此逻辑