Зачастую написать даже простую функцию, обработав все исключения (типа деления на ноль) бывает непросто. Да, собственно, весь смысл использования Basic теряется, если тратить много времени на отладку и тестирование, это уже не программирование без программирования, чем Basic и ценен.
Особый случай, когда у вас целая таблица из вбитых пользовательских функций, скажем, на 300 значений - кликать OK по окну сообщения об ошибке 300 раз не очень приятное занятие (обычно в таком случае надо вырубать офис аварийно, запускать чистый файл, отключать макросы, потом открывать-править проблемный файл, то что вызвало ошибку, опять включать макросы...
Избежать всего этого геммороя можно только вставив в каждую функцию обработчик ошибок.
Обработчик ошибок вставляется по следующей схеме
Function sample(x)
On Error GoTo ErrorHandler
' .... тут тело функции с вычислениями
sample = чему то
Exit Function
ErrorHandler:
sample ="случилась страшная ..ня"
End Function
Например следующая функция при x=0 автоматически обрабатывает исключение, предотвращая ошибку. При нулевом x выдается текстовое значение "n/a" (само собой в данном случае подразумевается тип Variant для значения функции - то есть в зависимости от контекста может быть числом, текстом и т.д. Если тип переменной не объявляется, то по умолчанию предполагается именно этот универсальный тип)
Function calculatehyp(x)
On Error GoTo ErrorHandler
calculatehyp=1/x
Exit Function
ErrorHandler:
calculatehyp="n/a"
End Function
Особый случай, когда у вас целая таблица из вбитых пользовательских функций, скажем, на 300 значений - кликать OK по окну сообщения об ошибке 300 раз не очень приятное занятие (обычно в таком случае надо вырубать офис аварийно, запускать чистый файл, отключать макросы, потом открывать-править проблемный файл, то что вызвало ошибку, опять включать макросы...
Избежать всего этого геммороя можно только вставив в каждую функцию обработчик ошибок.
Обработчик ошибок вставляется по следующей схеме
Function sample(x)
On Error GoTo ErrorHandler
' .... тут тело функции с вычислениями
sample = чему то
Exit Function
ErrorHandler:
sample ="случилась страшная ..ня"
End Function
Например следующая функция при x=0 автоматически обрабатывает исключение, предотвращая ошибку. При нулевом x выдается текстовое значение "n/a" (само собой в данном случае подразумевается тип Variant для значения функции - то есть в зависимости от контекста может быть числом, текстом и т.д. Если тип переменной не объявляется, то по умолчанию предполагается именно этот универсальный тип)
Function calculatehyp(x)
On Error GoTo ErrorHandler
calculatehyp=1/x
Exit Function
ErrorHandler:
calculatehyp="n/a"
End Function
No comments:
Post a Comment