Добрый день. Есть ряд макросов которые обрабатывают данные на листе. С этими макросами работают разные пользователи. Сам макрос защищен паролем чтобы вы него ни кто не лез. поэтому кнопке и поэтому Debug неактивно чтобы остановить макрос. End ни как не меняет ситуацию. И приходится отключать эксель через диспетчер задач. А зачастую у пользователей открыты еще книги где данные не сохранены и сохранять их неправомерно так как не известно надо это пользователю или нет. Пользователи могут вносить данные в таблицу и допуска разного рода ошибки ( пробелы, точки вместо запятых, буквы вместо цифр и т.д.) Пытался ограничить пользователей и заставить из выполнять правила ввода данных, но всем не объяснишь к тому же пользователи прибавляются, а инструкции читать не любят. Добавлять везде
Код
On Error Resume Next
Немного трдозатратно. Есть ли какая-то строка которую ставить в начале макроса и в случае ошибки он останавливал работу макроса. Ну или выводит какое-то сообщение Файл с ошибкой приложил , но вряд ли он нужен ПАРОЛЬ 1111
Добрый день! Ваш вопрос непонятен. Вы приложили файл, не указав пароль для проекта. Если запустить (Alt+F8) единственный доступный для выполнения макрос, то выдается окно диалога с внятным описанием ошибки. После нажатия на кнопку "End" выполнение макроса завершается.
В файле стоит пароль на 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, но для ошибки в любом месте макроса: 1. После Sub следующей строкой пишем On Error GoTo er 2. Перед End Sub пишем 2строки
Код
Exit Sub
Er: MsgBox "Непредвиденная ошибка", vbCritical
End Sub
В таком случае по ошибке сразу прилетим на сообщение о ней и корректно выйдем
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄