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

我正在尝试使用下面的代码对所有透视表进行sorting:

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

我已经做了一个macros,但它是漫长而丑陋的,必须有一种方法来一次性定位所有的数据透视表。 我哪里错了?

您可以使用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 

我没有足够的声望评论@Doug Glancy的代码,并且很清楚这是一个旧post,但注意到一个小小的疏漏

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

由于循环透视Pivot表ActiveWorkbook.PivotTables()ActiveSheet.PivotTables()应该使用For/Next循环variables

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

否则,你冒险操纵错误的数据透视表。