Начните с события Worksheet_PivotTableUpdate
Рабочий лист, в котором находится сводная таблица, нуждается в следующем коде, поэтому он вызывает новую функцию «RefreshAbsenceLabels» в модуле 1 всякий раз, когда обновляется эта специально названная сводная таблица :
Private Sub Worksheet_PivotTableUpdate(ByVal Target As PivotTable) If Target.Name = "This Specific Table" Then Module1.RefreshAbsenceLabels MsgBox "The PivotTable has been updated." End If End Sub
Поговорите с правым графиком и обновите его Легенду
Public Function RefreshAbsenceLabels() Set DaysAbsent = ActiveWorkbook.Worksheets("Dashboard").ChartObjects("Department Absences") With DaysAbsent.Chart If .HasLegend Then .HasLegend = False End If .HasLegend = True
Установите свой счетчик и установите его на счет серии минус один
минус один - учесть тот факт, что коллекция FullSeriesCollection пронумерована от 1 до X, а элементы LegendEntries пронумерованы от X-1 до 0
Dim x As Integer x = .FullSeriesCollection.Count - 1
Цикл по серии, удаление соответствующих элементов LegendEntries
Счетчик зацикливается на ноль. Преимущество обратной нумерации LegendEntries заключается в том, что вам не нужно компенсировать пропущенные элементы каждый раз, когда вы удаляете вещи: с любыми перенумерованными элементами уже обращались, и больше не имеет значения, какое они число.
Application.WorksheetFunction.Max находит наибольшее значение из серии
For Each ser In .FullSeriesCollection If Application.WorksheetFunction.Max(ser.Values) = 0 Then 'MsgBox "Deleting" & ser.Name & " - " & x .Legend.LegendEntries(x).Delete End If x = x - 1 Next End With End Function