- •Скрытые перемещения
- •Относительные перемещения
- •Перемещаемся по листам не зная их имён
- •Крайние перемещения
- •Выделения относительно активной ячейки
- •Относительные формулы
- •Столбцы и строки
- •Error. Обработка ошибок
- •Способ №1. Перенаправление программы
- •Способ №2. Настойчивость в исправлении ошибки
- •Скачать пример
- •Способ №3. Предупреждён. Сообщение об ошибке
- •Способ №4. Очистка ошибки
- •Способ №5. Идём напролом
- •Создание собственной функции
- •Цифры прописью
- •Заставка приветствия реализованная на UserForm
- •Выпадающий список ComboBox на UserForm
- •Работа с ComboBox
- •Как поставить значение по умолчанию в ComboBox?
- •Запрет ввода данных в ComboBox
- •Ускоряем работу макроса в Excel
- •Глобальное ускорение
Скачать пример
Искусственно создадим ошибку. Самый простой способ - взять любое число и поделить его на ноль. Напишем простенькую программу и на ней будем рассматривать различные способы обхода ошибки.
Sub primer1()
a = 10
b = InputBox("Введите число отличное от 0", "Ввод данных", "0")
c = a / b
MsgBox "Результат: " & a & "/" & b & "=" & c, vbInformation, "Ответ"
End Sub
Способ №1. Перенаправление программы
Это пожалуй самый популярный способ, так как при возникновении ошибки лучше указать пользователю где он ошибся и перенаправить на другой путь выполнения программы. Сделать перенаправление можно при помощи команды GoTo, но сначала нам надо дать понять программе, что мы хотим отследить ошибку - т.е. включить распознование ошибок. Делается это следующим образом. В начало кода программы мы помещаем следующую команду
On Error
которая и говорит о том, что необходимо включить отслеживание ошибок. А команда GoTo уже перенаправит программу на то место, которое мы укажем. На примере нашей программе это можно продемонстрировать так:
Sub primer1()
On Error GoTo errors
a = 10
b = InputBox("Введите число отличное от 0", "Ввод данных", "0")
c = a / b
MsgBox "Результат: " & a & "/" & b & "=" & c, vbInformation, "Ответ"
GoTo Endprimer
errors:
MsgBox "Ошибка! Вводите корректные данные", vbCritical, "Ошибка"
Endprimer:
End Sub
Поясню. При возникновении ошибки, программа с места ошибки сразу перенаправится на errors: и уже будет продолжать выполнять код с этого места. То-есть с информационного сообщения о том, что у нас возникла ошибка, после этого сообщения программа так и продолжит выполнять макрос дальше, в данном случае программа просто закончится. В случае, если ошибки нет, нам покажется результат и код перенаправится на Endprimer:, так как туда нас перенаправил GoTo. Если Вы не хотите чтобы макрос выполнялся дальше, то можно добавить команду для выхода из макросаExit Sub (завершение выполнения текущего макроса).
Sub primer1()
On Error GoTo errors
a = 10
b = InputBox("Введите число отличное от 0", "Ввод данных", "0")
c = a / b
MsgBox "Результат: " & a & "/" & b & "=" & c, vbInformation, "Ответ"
GoTo Endprimer
errors:
MsgBox "Ошибка! Вводите кооректные данные", vbCritical, "Ошибка"
Exit Sub
Endprimer:
End Sub
Способ №2. Настойчивость в исправлении ошибки
Можно сделать так, что в случае возникновения ошибки программа будет требовать от Вас ввести правильное число. Выглядеть это будет так.
Sub primer2()
On Error GoTo errors
a = 10
b = InputBox("Введите число отличное от 0", "Ввод данных", "0")
c = a / b
MsgBox "Результат: " & a & "/" & b & "=" & c, vbInformation, "Ответ"
GoTo vpered
errors:
MsgBox "Ошибка! Повторите ввод", vbCritical, "Ошибка"
b = InputBox("Введите число отличное от 0", "Ввод данных", "0")
Resume
vpered:
End Sub
Тут у нас добавилась только одна новая команда Resume, которая и будет перенапрявлять программу на место возникновения ошибки, тем самым требовать от нас правильного ввода данных, и пока мы их не введём, программа так и будет требовать от нас непонятного.
