使用VBA Excel对工作簿中的所有数据透视表进行排序

时间:2014-11-12 22:52:29

标签: excel vba sorting pivot-table

我正在尝试使用以下代码对所有数据透视表进行排序:

Sub sortpivots()

    ActiveWorkbook.PivotTables().PivotFields("name").AutoSort _
       xlAscending, "Min of start", ActiveSheet.PivotTables(). _
       PivotColumnAxis.PivotLines(1)



End Sub

我制作了一个宏但它又长而丑,必须有一种方法可以同时定位所有数据透视表。我哪里错了?

2 个答案:

答案 0 :(得分:1)

您可以使用For Each循环,第一个循环遍历Activeworkbook的工作表,第二个循环遍历每个工作表中的数据透视表:

Sub sortpivots()
Dim ws As Excel.Worksheet
Dim pvt As Excel.PivotTable

For Each ws In ActiveWorkbook.Worksheets
    For Each pvt In ws.PivotTables
        ActiveWorkbook.PivotTables().PivotFields("name").AutoSort _
            xlAscending, "Min of start", ActiveSheet.PivotTables(). _
            PivotColumnAxis.PivotLines(1)
    Next pvt
Next ws
End Sub

答案 1 :(得分:1)

我没有足够的声誉对@Doug Glancy的代码发表评论,并且我很清楚这是一个老帖子,但发现了一个小小的疏忽

    For Each pvt In ws.PivotTables
        ActiveWorkbook.PivotTables().PivotFields("name").AutoSort _
            xlAscending, "Min of start", ActiveSheet.PivotTables(). _
            PivotColumnAxis.PivotLines(1)
    Next pvt

由于遍历数据透视表ActiveWorkbook.PivotTables()ActiveSheet.PivotTables()应该使用For/Next循环变量

For Each pvt In ws.PivotTables
    pvt.PivotFields("name").AutoSort _
        xlAscending, "Min of start", pvt. _
        PivotColumnAxis.PivotLines(1)
Next pvt

否则您可能会操纵错误的数据透视表。