Блог о программном обеспечении

Зачем оно нужно?
Публиковать для себя разные вещи, чтобы потом не искать их у себя по разным папкам.
И, конечно, - делиться открытой информацией с другими.
Коротко по темам Caelinux - самый инженерный дистрибутив линукс;
CalculiX - мощная программа для расчетов по МКЭ;
OpenOffice Basic - то что легче выучить и затем эффективно использовать
Maxima - символьная математика от Вильяма Шеллтера, профессора Остинского университета. Все прочее - понемногу.

Обработчик ошибок в функциях OpenOffice Basic

Зачастую написать даже простую функцию, обработав все исключения (типа деления на ноль) бывает непросто. Да, собственно, весь смысл использования 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




No comments:

Post a Comment