Страницы: 1
RSS
Остановка работы макроса при любой ошибке вмакросе
 
Добрый день.
Есть ряд макросов которые обрабатывают данные на листе.
С этими макросами работают разные пользователи. Сам макрос защищен паролем чтобы вы него ни кто не лез. поэтому кнопке и поэтому Debug неактивно чтобы остановить макрос. End ни как не меняет ситуацию. И приходится отключать эксель через диспетчер задач. А зачастую у пользователей открыты еще книги где данные не сохранены и сохранять их неправомерно так как не известно надо это пользователю или нет.
Пользователи могут вносить данные в таблицу и допуска разного рода ошибки ( пробелы, точки вместо запятых, буквы вместо цифр и т.д.)
Пытался ограничить пользователей и заставить из выполнять правила ввода данных, но всем не объяснишь к тому же пользователи прибавляются, а инструкции читать не любят.
Добавлять везде
Код
On Error Resume Next  
Немного трдозатратно.
Есть ли какая-то строка которую ставить в начале макроса и в случае ошибки он останавливал работу макроса. Ну или выводит какое-то сообщение
Файл с ошибкой приложил , но вряд ли он нужен
ПАРОЛЬ 1111
Изменено: Максим Колесников - 04.09.2020 12:28:52
Не внимателен при вводе текста хорошо что есть F7
 
Добрый день! Ваш вопрос непонятен.
Вы приложили файл, не указав пароль для проекта.
Если запустить (Alt+F8) единственный доступный для выполнения макрос, то выдается окно диалога с внятным описанием ошибки. После нажатия на кнопку "End" выполнение макроса завершается.
Изменено: sokol92 - 04.09.2020 12:25:11
Владимир
 
В файле стоит пароль на vba проект...
Общими словами - больше прописывать в макросе обработчиков ошибок, автоматически заменять точки на запятые, предугадывайте ошибки пользователей и обрабатывайте их в коде макроса

В общем смысле
Код
On error resume next

'ВОТ ТУТ ДЕЛАЕМ ЧТО-ТО ГДЕ МОЖЕТ ВОЗНИКНУТЬ ОШИБКА

If err <>0 then
   MsgBox "Произошла ошибка: " & Err.Number & Chr(10) & Err.Description, 48, "Ошибка"
   Exit sub 'ВОТ ТУТ ВЫХОД ИЗ ПРОГРАММЫ
End if
On error goto 0 'отключаем обработчик ошибок

Можно написать один обработчик:

Код
Sub Test()
'в самом начале кода пишем
On Error GoTo MyErrorHandler
'ваш код
'
'
'
Exit sub 'выход из программы, если никаких ошибок не было

MyErrorHandler:
MsgBox "При выполнении макроса произошла ошибка!" & vbCrLf & "Описание: " & Err.Description & vbCrLf & "Номер: " & Err.Number, vbExclamation, "Ошибка"
End Sub
Изменено: New - 04.09.2020 12:31:21
 
Максим Колесников, примерно, как New, но для ошибки в любом месте макроса:
  1. После Sub следующей строкой пишем On Error GoTo er
  2. Перед End Sub пишем 2строки
Код
Exit Sub
Er: MsgBox "Непредвиденная ошибка", vbCritical
End Sub

В таком случае по ошибке сразу прилетим на сообщение о ней и корректно выйдем
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Jack Famous, да, я как раз дописал второй пример в своём сообщении об этом же )
 
Всем спасибо . Все работает.
Не внимателен при вводе текста хорошо что есть F7
Страницы: 1
Наверх