Сортировка всех сводных таблиц в книге с использованием VBA Excel

Я пытаюсь сортировать все сводные таблицы на многих листах, используя следующий код:

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

Я сделал макрос, но он длинный и уродливый, должен быть способ нацеливаться на все сводные таблицы сразу. Где я иду не так?

Вы можете использовать для каждой петли, сначала для того, чтобы циклически перебирать рабочие листы 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, и я хорошо знаю, что это старый пост, но заметил незначительный надзор

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

Поскольку цикл через ActiveWorkbook.PivotTables() таблицу 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 

В противном случае вы рискуете манипулировать неправильной сводной таблицей.

Давайте будем гением компьютера.