суббота, 4 февраля 2012 г.

Поиск ошибок в макросах. Пошаговое выполнение макросов Excel


Приветствую вас!

Сегодня я хочу поговорить об ошибках, а если быть точнее, то об ошибках в макросах. Ошибки - это неотъемлемая составляющая написания макросов (ну, по крайней мере для меня). И я еще помню то время, когда я не умел быстро находить ошибки, а просто всматривался в текст макроса в надежде понять, что же происходит не так.

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

Среди прочих достоинств Excel стоит отметить, что все ошибки орфографии и пунктуации, встречаемые по ходу написания или выполнения макроса, будут появляться сообщениями, которые остановят выполнение макроса и укажут на место в макросе, где была найдена ошибка, что невероятно ускоряет нахождение большинства ошибок.






Те ошибки, которые так просто не найдутся, можно найти другими путями. Один из них - вывести множество промежуточных результатов либо же запустить пошаговое выполнение макроса.
Зачастую пошаговое выполнение макроса поможет лучше и быстрее найти ошибку, но если вы имеете дело с длиннющим циклом и весьма заметной ошибкой, то имеет смысл воспользоваться именно промежуточным выводом результатов (таблицей, например, где каждая строка будет соответствовать 1 циклу макроса).

Ну а мы вернемся к неверному результату макроса, написанного к посту об условных операторах Excel.

Легко видеть, что ошибки как минимум 2 - не происходит превращение чисел десятичной системы исчисления в цифры шестнадцатиричной системы, и появляются пробелы между цифрами.

Ну, поскольку промежуточные результаты уже были получены нами в формулах, и об ошибках мы кое-что знаем, весь макрос помечать не станем, только его часть.
Помечаем левой кнопкой мыши кликая на том месте, где хотим сделать пометку об остановке макроса.
Запускаем макрос стандартной кнопочной проигрывания (выделена красным).
Промежуточные результаты смотрим, наводя мышкой на переменные. Вот s2 имеет значение 14 и пробел. Почему? А потому, что p2=14, а мы должны были использовать не p2, а q2.
Пробел появляется после использования функции str. Поэтому проще всего убрать все пробелы из результата, добавив соответствующую строку.











В результате получим макрос без ошибок.

Вот так просто становится находить ошибки, используя правильный подход (в данном случае, пошаговое выполнение макроса).

Комментариев нет:

Отправить комментарий