Доброго дня. Уважаемые форумчане! Запускаю выполнение группы макросов: [vba]
Код
Sub GroupMacros() Call DetectError Call NextMacros End Sub
[/vba] Нужно что бы при ошибке макроса DetectError, макрос NextMacros не выполнялся. Т.е. нужно чтобы ошибка макроса DetectError остановила выполнение всех последующих макросов в макросе GroupMacros. Макрос DetectError написал не я, и вообще в коде vba я вообще ничего не понимаю. Помогите пожалуйста.
Доброго дня. Уважаемые форумчане! Запускаю выполнение группы макросов: [vba]
Код
Sub GroupMacros() Call DetectError Call NextMacros End Sub
[/vba] Нужно что бы при ошибке макроса DetectError, макрос NextMacros не выполнялся. Т.е. нужно чтобы ошибка макроса DetectError остановила выполнение всех последующих макросов в макросе GroupMacros. Макрос DetectError написал не я, и вообще в коде vba я вообще ничего не понимаю. Помогите пожалуйста.AndreiSMT
Sub GroupMacros() ' Включаем обработку ошибок On Error GoTo ErrorHandler
' Вызываем макрос DetectError Call DetectError
' Если ошибки не было, вызываем следующий макрос Call NextMacros
' Выходим из процедуры, чтобы не выполнять код обработчика ошибок Exit Sub
ErrorHandler: ' Обработчик ошибок MsgBox "Произошла ошибка в макросе DetectError. Выполнение макросов остановлено.", vbCritical ' Выходим из процедуры, чтобы не выполнять следующий макрос Exit Sub End Sub
[/vba]
AndreiSMT, Доброй. [vba]
Код
Sub GroupMacros() ' Включаем обработку ошибок On Error GoTo ErrorHandler
' Вызываем макрос DetectError Call DetectError
' Если ошибки не было, вызываем следующий макрос Call NextMacros
' Выходим из процедуры, чтобы не выполнять код обработчика ошибок Exit Sub
ErrorHandler: ' Обработчик ошибок MsgBox "Произошла ошибка в макросе DetectError. Выполнение макросов остановлено.", vbCritical ' Выходим из процедуры, чтобы не выполнять следующий макрос Exit Sub End Sub
Можно в DetectError параметром передавать переменную, там ей задавать значение при ошибке, и далее анализировать до вызова следующего макроса. Да даже и не параметром, а просто использовать публичную переменную уровня модуля. Т.к. в файле таких макросов нет - то и всё на этом.
Можно в DetectError параметром передавать переменную, там ей задавать значение при ошибке, и далее анализировать до вызова следующего макроса. Да даже и не параметром, а просто использовать публичную переменную уровня модуля. Т.к. в файле таких макросов нет - то и всё на этом.Hugo
AndreiSMT, не нашел макрос DetectError в вашем файле, потому и ответ выше - наобум получился. Как выглядят ошибки в макросе DetectError? От этого и надо плясать.
AndreiSMT, не нашел макрос DetectError в вашем файле, потому и ответ выше - наобум получился. Как выглядят ошибки в макросе DetectError? От этого и надо плясать.Апострофф
Сообщение отредактировал Апострофф - Воскресенье, 09.03.2025, 14:15
AndreiSMT, нужно бы понять что подразумеваете под ошибками. Потому что вот например вариант в файле Как вариант - можно добавить (или убрать, уже в файле добавил) ещё строку вот тут:
AndreiSMT, нужно бы понять что подразумеваете под ошибками. Потому что вот например вариант в файле Как вариант - можно добавить (или убрать, уже в файле добавил) ещё строку вот тут: Hugo
Ну там уже есть переменная GErrStr, которая имеет значение при ошибке, но оно там есть и после выполнения макросов. Вникать можно ли это значение сбрасывать... Проще свою добавить. Хотя вот - достаточно в первый файл добавить строку [vba]
Код
Sub GroupMacros() Call DetectError If Len(GErrStr) Then Exit Sub '<============== Call NextMacros End Sub
[/vba]
Ну там уже есть переменная GErrStr, которая имеет значение при ошибке, но оно там есть и после выполнения макросов. Вникать можно ли это значение сбрасывать... Проще свою добавить. Хотя вот - достаточно в первый файл добавить строку [vba]
Код
Sub GroupMacros() Call DetectError If Len(GErrStr) Then Exit Sub '<============== Call NextMacros End Sub