2016-08-23 7 views
0

Мой код VBA для обновления диапазона вторичных осей на всех графиках рабочего листа работает только для некоторых графиков. После запуска макроса отображается сообщение «Метод« Оси »объекта« _Chart »failed», при этом обновляются только некоторые из графиков на этом листе. В чем проблема?Код VBA работает только для некоторых диаграмм

Sub Macro1() 

Dim objChart As ChartObject, lower As Double, upper As Double 

lower = Application.InputBox(prompt:="Enter lower bound", Type:=1) 
upper = Application.InputBox(prompt:="Enter upper bound", Type:=1) 

For Each objChart In Sheets("Summary").ChartObjects 
    With objChart.Chart.Axes(xlValue, xlSecondary) 
     .MinimumScale = lower 
     .MaximumScale = upper 
    End With 
Next objChart 

End Sub 
+0

Не уверен, что вызывает ошибку, но вы можете извлечь тело цикла в свою собственную параметризованную процедуру * и обрабатывать ошибки времени выполнения *, так что, если первая итерация взорвется, вы все еще выполняете итерацию и пытаетесь с остатком «ChartObjects» 'коллекция. –

+0

Какие типы графиков у вас есть на этом * Сводном листе? У всех есть вторичная ось значений? –

+1

Я не могу сказать только из кода, но попробуйте добавить 'debug.print objChart.name' внутри цикла и выполнить код с помощью F8. Посмотрите, какие графики обновляются, а какие нет, может быть, есть что-то другое в отношении тех, кто этого не делает. –

ответ

0

Если ChartObject не имеет вторичную ось, доступ к ней вызовет ошибку. Я не мог понять способ воспроизвести вашу точную ошибку, но, как я уже говорил в a comment, извлекая процедуру и обработки ошибок времени выполнения должны, по крайней мере, поможет диагностировать проблему и сделать итерацию цикла все графики:

Public Sub UpdateSummarySheetChartAxes() 

    Dim lower As Double 
    lower = Application.InputBox(prompt:="Enter lower bound", Type:=1) 

    Dim upper As Double   
    upper = Application.InputBox(prompt:="Enter upper bound", Type:=1) 

    Dim objChart As ChartObject 
    For Each objChart In Sheets("Summary").ChartObjects 
     UpdateChartAxes objChart, lower, upper 
    Next objChart 

End Sub 

Private Sub UpdateChartAxes(ByVal objChart As ChartObject, ByVal lower As Double, ByVal upper As Double) 
    On Error GoTo CleanFail 
    With objChart.Chart.Axes(xlValue, xlSecondary) 
     .MinimumScale = lower 
     .MaximumScale = upper 
    End With 
CleanExit: 
    Exit Sub 
CleanFail: 
    Debug.Print "Failed updating axes for chart '" & objChart.Name & "'. Message: " & Err.Description 
    Resume CleanExit 
End Sub 
+1

Красивые. Проблема в том, что эти графики не имеют вторичной оси. Это отличный способ диагностики проблем в целом. Примите как ответ, как только мне позволено сделать это, большое спасибо! – rocketman

+1

'If .Axes.Count> 2 Then' -> имеет вторичную ось y (при условии, что arte никогда не будет вторичными x-осями ...) –

Смежные вопросы