excel vba – сортировать сводную таблицу, если фильтр изменен

Есть ли способ автоматически сортировать сводную таблицу каждый раз, когда изменяется выбранный фильтр сводной таблицы?

Я хотел бы сортировать сводную таблицу по значениям в порядке убывания в третьем столбце. Фильтр для этой таблицы обновляется каждый месяц. Поэтому я не хочу вручную сортировать его каждый раз.

Вот код vba, когда я делаю это вручную.

Sub example() ' ' example Macro ' Range("BO12").Select 'change period filter from "3" to "4" With ActiveSheet.PivotTables("PivotTable2").PivotFields("Period") .PivotItems("3").Visible = True .PivotItems("4").Visible = False End With 'sort the table in descending order by the values in the 3rd column ActiveSheet.PivotTables("PivotTable2").PivotFields("Channel").AutoSort _ xlDescending, "Sum of Shares", ActiveSheet.PivotTables("PivotTable2"). _ PivotColumnAxis.PivotLines(3), 1 End Sub 

Есть ли способ автоматизировать это?

Образец таблицы:

введите описание изображения здесь

Что я пробовал безрезультатно.

 Private Sub SortTables(ByVal Target As Range) ' ' SortTables Macro ' ' Range("D12").Select If Target.Name = "PivotTable3" Then ActiveSheet.PivotTables("PivotTable3").PivotFields("Channel").AutoSort _ xlDescending, "Sum of Shares", ActiveSheet.PivotTables("PivotTable3"). _ PivotColumnAxis.PivotLines(3), 1 End If End Sub 

Попробуйте код ниже, он будет Sort значения в соответствии с PivotFields("Period") где .PivotItems("3") (вы можете легко изменить его позже, чтобы он соответствовал вашим потребностям).

Код

 Option Explicit Sub example() Dim PivTbl As PivotTable Dim PivFld As PivotField Dim RngKey1 As Range ' set the Pivot Table to an object Set PivTbl = ActiveSheet.PivotTables("PivotTable2") 'change period filter from "3" to "4" With PivTbl With .PivotFields("Period") .PivotItems("3").Visible = True .PivotItems("4").Visible = False End With ' set "Period" to a PivotField Object Set PivFld = .PivotFields("Period") ' set the SortRange to PivotItem "3" of PivotField "Period" Set RngKey1 = PivFld.PivotItems("3").DataRange ' sort the Pivot Table's values in escending order, according to PivotItem "3" column PivFld.PivotItems("3").DataRange.Sort key1:=RngKey1, Order1:=xlDescending, Type:=xlSortValues, Orientation:=xlTopToBottom End With End Sub 
Давайте будем гением компьютера.