VBA: использование «При ошибке» при вызове сабвуфера в другой книге, - PullRequest
0 голосов
/ 06 сентября 2018

Я строю процесс, способный последовательно запускать и запускать подпрограммы в других нескольких книгах Excel. Это контролируется мастером пакетного запуска.

Если в любой из этих электронных таблиц есть ошибка любая , программе запуска необходимо выйти из прогона этой книги и перейти к следующей книге в пакете. Этот процесс должен быть непрерывным без ввода данных пользователем, поэтому любые диалоговые окна ошибок должны быть отключены.

Упрощенный до своей сути, мой код таков:

For I = 1 To NumberOfSubsToRun

    On Error GoTo ErrorHandler

    Application.Run (SpreadsheetName & "!SubName")

ErrorHandler:

Next I

Некоторые из рабочих книг падают (не проблема), но они создают диалоговое окно с ошибкой, останавливая пакет в его дорожках. Кажется, что процесс забывает все о коде On Error в модуле запуска, когда он запускает вызываемую подпрограмму.

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

Есть ли способ «напомнить» вызванным подпрограммам об ошибке при ошибке? Таким образом, если в какой-либо подпапке рабочей книги была ошибка, она действительно перешла бы к следующей рабочей книге?

Спасибо

1 Ответ

0 голосов
/ 06 сентября 2018

К сожалению, не существует простого способа обойти это: более узкие декларации «При ошибке» имеют преимущество, а метод Run использует некоторый не-VBA код под капотом, который эффективно блокирует распространение ошибки.

Но одним из решений было бы создать ваш лаунчер в VBScript. Затем вы можете управлять запуском Excel, делая приложение невидимым. Это должно скрыть любые сообщения, которые могли бы появиться.

Тогда можно также утверждать, что через определенное время процесс для определенной рабочей книги завершился неудачей, и справиться с этим соответствующим образом.

При достаточном внепроцессном контроле это решение будет исключительно стабильным. (У меня есть нечто подобное в моей фирме.)

...