«On Error GoTo» игнорируется при поиске второй горизонтальной оси - PullRequest
0 голосов
/ 05 мая 2019

ПРИМЕЧАНИЕ: приведенный ниже код действительно работает! Смотрите мой собственный ответ о причине проблемы, которую я имел. Я решил оставить здесь код, поскольку видел другие вопросы, касающиеся удаления второй горизонтальной оси.

НАЧАЛЬНЫЙ ВОПРОС / ПРОБЛЕМА: я формирую серию электронных таблиц, на которых есть несколько диаграмм. При применении выбранного стиля диаграммы (я использую стиль 209 - со строкой кода "ActiveChart.ChartStyle = 209), некоторые диаграммы возвращаются с двумя горизонтальными осями, что мне не нужно (некоторые диаграммы имеют две вертикальные оси - но это нормально). Вместо того, чтобы переходить от графика к диаграмме и вручную удалять каждую вторичную горизонтальную ось, я включил фрагмент кода в свою подпрограмму форматирования. Код работает большую часть времени. Но иногда я получаю ошибку ниже:

Изображение ошибки VB

У меня сложилось впечатление, что "On Error GoTo" "игнорируется". То есть вышеприведенная ошибка возникает, когда я попадаю на строку «ActiveChart.SetElement ...», поскольку у диаграммы нет вторичной оси. Это означает, что строка, в которой я запросил максимальный масштаб вторичной оси (то есть "chart_axis = ..."), должна вернуть ошибку (поскольку вторичная ось не существует). Это означает, что «On Error GoTo» был проигнорирован (или не перешел на «No_second_axis»).

Вот часть кода, которую я использую, которая удаляет вторую ось (если она существует):

    Dim s_name As String
    Dim chart_axis As Variant

    For Each Shape In ActiveSheet.Shapes
        s_name = Shape.Name
        If Shape.Type = msoChart Then
            ActiveSheet.ChartObjects(s_name).Activate
            On Error GoTo No_second_axis
    'Try to get the "scale" of secondary horizontal axis - error if non-existent                
    chart_axis = ActiveChart.Axes(xlValue, xlSecondary).MaximumScale
         'If it reached this line, there was no error when getting the second horizontal axis scale (i.e., the second horizontal axis exists. No I can delete it!
         With ActiveChart
            ActiveChart.SetElement (msoElementSecondaryCategoryAxisNone)
         End With
    No_second_axis:
        End If
    Next Shape

    End Sub

Я что-то упустил? Почему «On Error Go To» иногда работает, но не работает для некоторых графиков? Я не могу найти «шаблон» с точки зрения типа диаграммы, с которой он работает, и типа диаграммы, с которой он не работает.

Ответы [ 2 ]

2 голосов
/ 05 мая 2019

После дополнительных нескольких часов борьбы с этой проблемой я решил проверить каждый график перед запуском сабвуфера. Используя «Перейти к» в Excel (ярлык = F5) и выбрав «объекты», я мог бы циклически проходить по каждому объекту (нажав TAB). Я понял, что у меня есть некоторые «скрытые» диаграммы (то есть очень старые диаграммы, которые каким-то образом были свернуты / свернуты в какое-то непонятное место в электронной таблице). На этих графиках не было «серий». По какой-то причине часть кода chart_axis = ... может читать вторичную горизонтальную шкалу оси, но оси действительно не существует (поскольку я получаю сообщение об ошибке при попытке удалить такую ​​ось). Может быть, это ошибка в Excel или есть логическое объяснение этому - но это больше, чем мне нужно сейчас. Я решил ответить на свой вопрос, если этот пример кому-то поможет.

1 голос
/ 05 мая 2019

Ошибка, которую вы получаете, является общей ошибкой Office, которая предполагает, что что-то пошло не так под капотом.

Чтобы попытаться избежать этой ошибки, я бы попробовал следующее:

Используйте Application.ScreenUpdating=false в начале функции (а затем Application.ScreenUpdating=true в конце). Это помогло мне избежать проблем с рендерингом при обновлении большого количества объектов / фигур в документе Office.

ИЛИ

Используйте Application.ScreenUpdating=false в начале каждой итерации цикла объекта Shape, а затем используйте Application.ScreenUpdating=true после его обновления.

Надеюсь, вы сможете определить, какая из диаграмм создает проблему и при каких обстоятельствах (или состоянии).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...