Comece com o evento Worksheet_PivotTableUpdate
A planilha que abriga a Tabela Dinâmica precisa do código a seguir, de forma que chame a nova função 'RefreshAbsenceLabels' no Módulo 1 sempre que essa Tabela Dinâmica especificamente nomeada for atualizada:
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
Fale com o gráfico certo e atualize sua Legenda
Public Function RefreshAbsenceLabels()
Set DaysAbsent = ActiveWorkbook.Worksheets("Dashboard").ChartObjects("Department Absences")
With DaysAbsent.Chart
If .HasLegend Then
.HasLegend = False
End If
.HasLegend = True
Configure seu contador e configure-o para a contagem da série menos um
o menos um é responsável pelo fato de que o FullSeriesCollection é numerado de 1 a X, enquanto os itens de LegendEntries são numerados de X-1 a 0
Dim x As Integer
x = .FullSeriesCollection.Count - 1
Faz um loop por uma série, excluindo itens LegendEntries correspondentes
O contador desce para zero. A vantagem da numeração reversa da LegendEntries é que você não precisa compensar por itens perdidos toda vez que você apaga coisas: quaisquer itens renumerados já foram tratados, e não importa mais o número deles.
Application.WorksheetFunction.Max encontra o maior valor da série
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