Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скрытые перемещения.docx
Скачиваний:
11
Добавлен:
01.07.2025
Размер:
1 Мб
Скачать
☆

Скачать пример

Искусственно создадим ошибку. Самый простой способ - взять любое число и поделить его на ноль. Напишем простенькую программу и на ней будем рассматривать различные способы обхода ошибки.

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, которая и будет перенапрявлять программу на место возникновения ошибки, тем самым требовать от нас правильного ввода данных, и пока мы их не введём, программа так и будет требовать от нас непонятного.