Excel VBA: verifique si existe una serie de gráficos, si no, continúe

Excel VBA: verifique si existe una serie de gráficos, si no, continúe

Cada vez que se actualiza un gráfico dinámico, pierde su formato. Entonces tengo un fragmento de código VBA para volver a formatear el gráfico cada vez que se actualizan las páginas.

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

El tipo de gráfico es combinado y todas las series de tiempo son apiladas, excepto la serie de tiempo llamada "límite". El código anterior funciona siempre que la serie "Límite" esté en el conjunto de datos. Si el usuario selecciona un filtro o segmentación que elimina la serie de tiempo límite del conjunto de datos, Excel arroja un error.

Necesito hacer que el formato sea opcional.

He intentado probar para ver si la serie existe. Pero no funciona del todo.

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

¿Cómo puedo hacer que VBA se salte la serie "límite" si no existe?

Respuesta1

Una forma es simplemente ignorar los errores. Puedes hacer eso con elEn caso de errordeclaración:

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

Le On Error GoTo 0indica que cancele todo el manejo de errores y lo administre normalmente.

También puedes usar On Error Resume Nexten la parte superior en lugar 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

información relacionada