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 0
indica que cancele todo el manejo de errores y lo administre normalmente.
También puedes usar On Error Resume Next
en 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