Excel 数据透视表 - 如何在数据刷新时保留筛选和排序

Excel 数据透视表 - 如何在数据刷新时保留筛选和排序

我有一个数据透视表(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

问候马克

相关内容