Каждый раз, когда обновляется сводная диаграмма, она теряет свое форматирование. Поэтому у меня есть фрагмент кода 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