我有一个数据透视表(Excel 2010)。每次我更新数据并刷新时,数据透视表的排序和过滤器都会分别丢失,我需要明确修改过滤器(全选,然后删除不需要的过滤器)。
有什么解决办法吗?
- 当数据透视表刷新时,如何通过 VBA 更改过滤器?
- 当数据透视表刷新时,如何通过 VBA 更改排序?
- 当数据发生变化时,如何触发数据透视表的刷新?
提前感谢你问候马克
答案1
我可以实现我想要的。我首先简单地录制了一个宏,以便查看必须如何访问哪些对象的详细信息。之后我通过进行一些优化完成了这件事。请参阅下面的代码摘录,也许对其他人有帮助。
关于排序,我在论坛上找到了一个提示,您应该在原始数据表中分配另一列“排序顺序”,并将其用作数据透视表中的隐藏列,以便您可以使用该字段定义排序顺序。当您稍后更改数据时,这一项也不会丢失。
Sub Macro1()
On Error GoTo Fehler
Application.ScreenUpdating = False
With ActiveWorkbook.Sheets("Rating").PivotTables(1)
.PivotFields("OWASP 2010").ClearAllFilters
With .PivotFields("OWASP 2010")
If .PivotItems("(blank)").Visible = True Then
.PivotItems("(blank)").Visible = False
End If
' uncomment this sectin in case you liek to change the sorting via vba
' 1. sort first the stuff automatically A-Z
'.AutoSort xlAscending, "OWASP 2010"
' 2. move empty values to the end
'If .PivotItems(" ").Position <> .PivotItems.Count - 1 Then
' .PivotItems(" ").Position = .PivotItems.Count - 1
'End If
End With
.PivotFields("Categories").ClearAllFilters
With .PivotFields("Fortify Categories")
If .PivotItems("0").Visible = True Then
.PivotItems("0").Visible = False
End If
If .PivotItems("(blank)").Visible = True Then
.PivotItems("(blank)").Visible = False
End If
End With
End With
Application.ScreenUpdating = True
Exit Sub
Fehler:
Application.ScreenUpdating = True
End Sub
问候马克