Как вставить переменную в объект PivotLines () при сортировке столбца в сводной таблице с помощью VBA? - PullRequest
0 голосов
/ 30 марта 2020

У меня есть сводная таблица в Excel с количеством баллов, набранных каждым учеником за 3 упражнения. Я хотел бы отсортировать данные из упражнения в порядке убывания, используя код VBA, так что я могу узнать, у какого студента набрал лучший результат в упражнении 3. Моя реальная таблица намного больше, поэтому мне нужно сделать код для этого.

Student    exercise 1   exercise 2   exercise 3   Total
Mary          2            10            5         17
Peter         6             2           11         18
Karen        20             7           14         41
Total        28            19           30         77

Вот мой код:

Sub SortDescending()

    Dim Cell1  As Range
    Dim Cell2  As Range

    'Seeting the cell Mary ex1 to the variable Cell1
    Range("A2").End(xlToRight).Select
    ActiveCell.Offset(columnOffset:=-1).Activate
    ActiveCell.Offset(rowOffset:=1).Activate
    ActiveCell.Select
    Set Cell1 = ActiveCell

    'Seeting the cell Karen ex3 to the variable Celula2
    Range("A2").End(xlDown).Select
    ActiveCell.End(xlToRight).Select
    ActiveCell.Offset(columnOffset:=-1).Activate
    ActiveCell.Offset(rowOffset:=-1).Activate
    Set Cell2 = ActiveCell

    'Sorting the penultimate column
    Cell1.Select
    ActiveSheet.PivotTables("Tabela dinâmica1").PivotFields("Supp Desc").AutoSort _
    xlDescending, "Student", ActiveSheet.PivotTables( _
    "Tabela dinâmica1").PivotColumnAxis.PivotLines(3), 1    

End Sub

Я хотел вставьте PivotLines (Cell1) вместо числа 3 в аргументе. Или заставить сортировать нисходящий код работать для сводных таблиц , не зная позиции ячейки .

1 Ответ

0 голосов
/ 30 марта 2020

Если я правильно понял, я верю, что в вашем коде вы меняете порядок полей: «Студент» должен быть вместо «Supp Des c» и наоборот.

Давайте попробуем это :

Sub SortByExercise3()

Dim PvtTbl As PivotTable
Set PvtTbl = Worksheets("SheetWithTablaDinamica").PivotTables("Tabela dinâmica1")
PvtTbl.PivotFields("Student").AutoSort Order:=xlDescending, Field:="Sum of Exercise3"

End Sub

Результаты:

enter image description here

Следите за тем, чтобы имена полей вашей сводной таблицы совпадали с название полей в вашем коде VBA.

...