Excel VBA: проверьте, существует ли ряд диаграмм, если нет, продолжайте

Excel VBA: проверьте, существует ли ряд диаграмм, если нет, продолжайте

Каждый раз, когда обновляется сводная диаграмма, она теряет свое форматирование. Поэтому у меня есть фрагмент кода VBA для переформатирования графика каждый раз, когда обновляются страницы.

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

Тип графика — комбинированный, и все временные ряды сложены, за исключением временного ряда под названием «limit». Приведенный выше код работает, пока ряд «Limit» находится в наборе данных. Если пользователь выбирает фильтр или срез, который удаляет временной ряд Limit из набора данных, Excel выдает ошибку.

Мне нужно сделать формат необязательным.

Я пытался проверить, существует ли эта серия. Но она не совсем работает.

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

Как заставить VBA пропустить серию «limit», если ее не существует?

решение1

Один из способов — просто игнорировать ошибки. Вы можете сделать это с помощьюПри ошибкезаявление:

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

Он On Error GoTo 0сообщает ему о необходимости отменить всю обработку ошибок и продолжить работу в обычном режиме.

Вы также можете просто использовать On Error Resume Nextвверху вместо 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

Связанный контент