Как я могу переключиться с суммы на среднее значение в сводной таблице? - PullRequest
1 голос
/ 24 мая 2019

Я создаю ComboBox с "Sum" и "Average". Таким образом я хочу изменить значение сводной таблицы с суммы на среднее и наоборот.

Таким образом, есть 3 столбца поля Значение. И у меня есть другой код, который может заставить каждый из них появляться в зависимости от того, на какие кнопки я нажимаю. Пример: если я нажму на 2016, в сводной таблице появится только значение 2016 года.

Как я могу изменить значение «Сумма» на «Среднее»?

Private Sub ComboBox2_Change()

    Dim pt as PivotTable
    Dim vField as PivotTable

    Set pt = ActiveSheet.PivotTables("PivotTable1")

    With ActiveSheet.ComboBox2
        Select Case ComboBox2
        Case Is = "Average"
            If pt = ("Sum of 2016") Then
                  .Caption = "Average of 2016"
                  .Function = xlAverage
            End If
            If pt = ("Sum of 2017") Then
                  .Caption = "Average of 2017"
                  .Function = xlAverage
        Case Is = "Sum"
            If pt = ("Average of 2016") Then
                  .Caption = "Sum of 2016"
                  .Function = xlSum
            End If
            If pt = ("Average of 2017") Then
                  .Caption = "Sum of 2017"
                  .Function = xlSum
            End if
        End Select
    End with
End Sub

1 Ответ

1 голос
/ 24 мая 2019

Если вы переключите Function поля данных, оно автоматически получит новое имя, поэтому вы должны изменить имя позже (не раньше).

Вы можете Select Case либо свой Combobox.Valueили ваш DataField.Caption.

Вот пример:

Private Sub ComboBox2_Change()
    Dim pt As PivotTable

    Set pt = ActiveSheet.PivotTables("PivotTable1")

    With pt.DataFields(1)
        Select Case ActiveSheet.ComboBox2.Value
        Case "Average"
            If .Caption = "Sum of 2016" Then
                .Function = xlAverage
                .Caption = "Average of 2016"
            ElseIf .Caption = "Sum of 2017" Then
                .Function = xlAverage
                .Caption = "Average of 2017"
            End If
        Case "Sum"
            If .Caption = "Average of 2016" Then
                .Function = xlSum
                .Caption = "Sum of 2016"
            ElseIf .Caption = "Average of 2017" Then
                .Function = xlSum
                .Caption = "Sum of 2017"
            End If
        End Select
    End With
End Sub

Общая подсказка: если вы используете .Function или .Caption, он принадлежит предыдущему оператору With ранее,который - в этом коде - должен быть полем данных сводки, а не списком.

...