Excel VBA «При ошибке» перехватывает некоторые, но не все ошибки - PullRequest
1 голос
/ 14 апреля 2020

У меня есть несколько встроенных диаграмм в рабочей книге. У некоторых диаграмм есть прямоугольник, называемый «прямоугольник 1», и я хочу изменить эти прямоугольники. Следующий код должен сделать это. Он работает нормально для некоторых диаграмм (как с прямоугольником, так и без него), но затем падает на строку «Задать прямоугольник» с «ошибкой времени выполнения -2147024809 (80070057) Элемент с указанным именем не найден».

Есть идеи, почему обработчик ошибок не подхватывает это?

Sub RepositionExtrapolationRectangles()
Dim cht As ChartObject
Dim sht As Worksheet
Dim rect As Shape
Dim axs As Axis

For Each sht In ThisWorkbook.Sheets
  For Each cht In sht.ChartObjects

    With cht.Chart
      On Error GoTo skip
      Set rect = .Shapes("Rectangle 1")
      On Error GoTo 0

      Set axs = .Axes(xlCategory)
      rect.Left = .PlotArea.InsideLeft + ([CurrentDate] - axs.MinimumScale) / (axs.MaximumScale - axs.MinimumScale) * .PlotArea.InsideWidth
      rect.Width = .PlotArea.InsideLeft + .PlotArea.InsideWidth - rect.Left
      rect.Top = .PlotArea.InsideTop
      rect.Height = .PlotArea.InsideHeight
    End With
skip:


 Err.Clear

  Next
Next
End Sub

1 Ответ

1 голос
/ 14 апреля 2020

Я провел небольшое быстрое тестирование, и я не могу подтвердить , почему работает следующее, но оно работает:

Используйте On Error GoTo -1 вместо Err.Clear, чтобы очистить ваш Обработка ошибок объекта.

Кажется, что просто использование Err.Clear не сбрасывает его должным образом, поэтому он не может перехватить ошибку во второй раз.

Сначала я подумал, что это может из-за For Each l oop, но перезапись тестового кода без al oop не сработала и не переписала его, чтобы не использовать with.

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