Excel VBA: verifique se existe uma série de gráficos, se não, continue

Excel VBA: verifique se existe uma série de gráficos, se não, continue

Cada vez que um gráfico dinâmico é atualizado, ele perde sua formatação. Portanto, tenho um código VBA para reformatar o gráfico sempre que as páginas são atualizadas.

Private Sub Worksheet_Calculate()
    ActiveSheet.ChartObjects("Chart 3").Activate
    ActiveChart.FullSeriesCollection(1).ChartType = xlColumnStacked
    ActiveChart.FullSeriesCollection("Limit").ChartType = xlLine
    ActiveChart.Deselect
End Sub

O tipo de gráfico é combo e todas as séries temporais são empilhadas, exceto a série temporal chamada "limite". O código acima funciona enquanto a série “Limit” estiver no conjunto de dados. Se o usuário selecionar um filtro ou segmentação de dados que remova a série temporal Limite do conjunto de dados, o Excel gerará um erro.

Preciso tornar o formato opcional.

Tentei testar para ver se a série existe. Mas não está funcionando bem.

Private Sub Worksheet_Calculate()
    ActiveSheet.ChartObjects("Chart 3").Activate
    ActiveChart.FullSeriesCollection(1).ChartType = xlColumnStacked

    If ActiveChart.FullSeriesCollection("Limit") Is Nothing Then "do nothing here"
    Else ActiveChart.FullSeriesCollection("Limit").ChartType = xlLine
    End If    

    ActiveChart.Deselect
End Sub

Como posso fazer com que o VBA pule a série "limite" se ela não existe?

Responder1

Uma maneira é simplesmente ignorar os erros. Você pode fazer isso com oEm caso de errodeclaração:

Private Sub Worksheet_Calculate()
    On Error GoTo Finish
    Dim Nope As Integer
    ActiveSheet.ChartObjects("Chart 3").Activate
    ActiveChart.FullSeriesCollection(1).ChartType = xlColumnStacked
    ActiveChart.FullSeriesCollection("Limit").ChartType = xlLine
    ActiveChart.Deselect
Finish:
    On Error GoTo 0
End Sub

O On Error GoTo 0informa para cancelar todo o tratamento de erros e gerenciá-lo normalmente.

Você também pode usar On Error Resume Nextno topo em vez de GoTo Finish:

Private Sub Worksheet_Calculate()
    On Error Resume Next
    Dim Nope As Integer
    ActiveSheet.ChartObjects("Chart 3").Activate
    ActiveChart.FullSeriesCollection(1).ChartType = xlColumnStacked
    ActiveChart.FullSeriesCollection("Limit").ChartType = xlLine
    ActiveChart.Deselect
End Sub

informação relacionada