Механизм вычислений Excel оборачивает любые ошибки, возникающие в пользовательской функции (UDF - пользовательская функция, вызываемая из ячейки рабочего листа), и выдает ошибку ячейки #VALUE
вместо того, чтобы взорваться, как это обычно происходит с испорченным кодом VBA.Без какой-либо обработки ошибок отладка UDF может быть «забавной».
Реализация обработки ошибок:
Public Function MyUDF(args)
On Error GoTo ErrHandler
'...code...
Exit Function
ErrHandler:
Debug.Print Err.Description
Stop ' halts execution
Resume 'jumps back to the error-raising statement
End Function
Иметь панель непосредственного доступа видимой (Ctrl +G) в VBE, затем вычислите рабочий лист, который вызывает UDF, с несколькими возможными входами, охватывающими все граничные случаи - с особым вниманием к значениям, которые могут привести к переполнению и делению на ноль ошибки.
Когда выполнение останавливается по ключевому слову Stop
, нажмите клавишу F8, чтобы запустить оператор Resume
, который приведет вас прямо к утверждению, вызвавшему ошибку - оттуда вы можете проверить всезадействованные переменные, и шаг за шагом проходите по функции, чтобы проверить свою математику при ее выполнении - и вы можете переместить желтую строку «текущая инструкция» обратно к уже выполненному оператору, чтобы перезапустить ее,тоже - просто перетащите желтую стрелку туда, где вы хотите, чтобы она была внутри функции, или щелкните правой кнопкой мыши инструкцию и выберите «установить следующую инструкцию».
Eкод обработки ошибок / отладки может быть удален, как только вы знаете , функция работает должным образом, и вы согласны с ней, возвращая ошибку #VALUE
с недопустимыми аргументами.