~ Каталог всевозможных ошибок, стремящихся "одурачить" вашу программу
~ Принципы борьбы с ошибками
~ Замечательная возможность - режим паузы
~ Все средства отладки редактора Visual Basic, включая команды Step и окна Immediate, Locals и Watch
~ Использование редактора Visual Basic как калькулятора с помощью окон Immediate и Watch
~ Изощренные приемы отладки, уменьшающие риск появления ошибок при выполнении программы
Создание программного кода в VBA - это только полдела. Заставить этот программный код работать и работать так, как нужно, - вот что требует больше всего усилий. Вылавливание и уничтожение ошибок становятся решающим моментом в создании программы, и нам с вами пришло время выяснить, как это делается в VBA. В этой главе мы обсудим также приемы программной обработки ошибок, позволяющие программе грациозно выходить из трудных ситуаций, которые случаются во время ее выполнения.
Все возможные неприятности происходят обязательно
Программа, создаваемая с помощью VBA (как и любого другого языка программирования), обычно сопровождается тремя следующими типами ошибок.
* Ошибки компиляции. Синтаксические и другие ошибки, сразу же делающие невозможным выполнение программы.
* Логические ошибки. Изъяны проектирования программы, в результате которых программа делает то, что вы не планировали, или не делает того, что вы планировали.
* Ошибки выполнения. Приводят к остановке выполнения программы вследствие либо логических ошибок, либо возникновения ситуации, не предусмотренной в программе (подробно об этом - ниже, в подразделе "Откуда берутся ошибки выполнения").
Изо всех трех типов ошибок синтаксические, определенно, самые простые и для обнаружения, и исправления. Поэтому я коснусь синтаксических ошибок только вкратце, чтобы основное внимание уделить приемам выявления и искоренения ошибок двух других типов; по сути, они и являются настоящими ошибками.
Исправление синтаксических ошибок
Если вы допустите синтаксическую ошибку, редактор Visual Basic сообщит вам об этом почти сразу же, не дожидаясь, когда вы дадите указание выполнить программу. Если вы напечатаете что-то такое, что редактор Visual Basic не поймет, символы в строке с непонятным программным кодом станут красными, а как только точка ввода перейдет из этой строки на другую, вы получите сообщение, подтверждающее наличие ошибки и с некоторым разъяснением ее (при условии, что на вкладке Editor (Редактор) диалогового окна Options (Параметры) отмечен флажок Auto Syntax Check (Автоматическая проверка синтаксиса); чтобы открыть это диалоговое окно, выберите Tools=Options из меню). Например, если вы напечатаете If х = 3 и забудете напечатать Then, появится сообщение Compile error : Expected: Then or GoTo (Ошибка компиляции: ожидалось Then или GoTo).
Некоторые синтаксические ошибки VBA не замечает до тех пор, пока программа не начнет выполняться. Например, VBA не будет поначалу возражать, если вы укажете в операторе GoTo ссылку на несуществующую метку или вызовете несуществующую процедуру- по этому поводу вы получите сообщение об ошибке компиляции уже после начала выполнения программы.
Когда известно, где допущена синтаксическая ошибка, исправить ее уже несложно. Если вы сомневаетесь в правильном написании имени, объявления или вызова процедуры или функции, имени переменной, оператора создания нового экземпляра объекта или использования управляющей структуры, обратитесь к соответствующим главам этой книги или подходящим разделам справки по VBA.
Энтомология для программистов
После того как вы выловите и уничтожите все ошибки компиляции, а ваша программа начнет выполняться, никто не осудит вас за внезапно нахлынувшее чувство гордости и удовлетворения. Но если программа вдруг сообщит, что 2 + 2 = 22, или если весь текст в документе окажется розовым, то знайте - где-то в программном коде все же затаилась ошибка.
Причиной подобных ошибок являются ошибки в логике программы. При выполнении программа всегда делает то, что ей приказали делать вы, - проблема заключается в том, что с помощью созданного вами программного кода вы заставши программу делать не то, что в действительности хотели заставить ее делать. Вы и должны отыскать те операторы, которые привели к неправильным действиям. Процесс отыскания ошибок называется отладкой, и в этом разделе обсуждаются все средства и приемы, которые помогут вам в вашей отладочной кампании.
Ясно, что приемы, которые используются для выявления и исправления логических ошибок, годятся и для предотвращения появления ошибок выполнения, вытекающих из логических. Но поскольку ни одна программа не в состоянии предвидеть абсолютно все возможные ситуации, в любой программе, предназначенной для использования другими людьми, необходимо предусмотреть программный код для обработки вероятных ошибок выполнения.
Тест, тест, тест
Хорошо, когда ошибки сами заявляют о себе, например, с помощью явно неправильных ответов, изменения цветов экрана на очень странные или появления сообщений об ошибках.
К сожалению, часто логические ошибки оказываются не такими "крикливыми", а многие ошибки выполнения вообще случаются только иногда, при определенном стечении обстоятельств.
Пожалуй, не стоит предполагать, что ваша программа будет работать правильно и надежно сразу же после того, как '"вылупится", гораздо лучше запланировать достаточно времени на ее тщательное тестирование в самых разных условиях.
Вот несколько советов по тестированию программ.
* Если программа предназначена для работы с разными типами документов, то и попробуйте ее в работе с разными типами документов. Попытайтесь работать с программой, когда в VBA-приложении открыто несколько документов и когда- ни одного.
* Посмотрите, как выполняется программа, когда окно документа находится в разных состояниях (развернуто, свернуто или восстановлено).
* Попробуйте выполнить программу, когда в окне документа выделены различные элементы или группы элементов.
* Если программа требует ввода информации от пользователя в специальном окне или в специальной форме, опробуйте все вероятные и невероятные типы ввода и посмотрите на результат. Например, если вводимое значение предполагается целым, попробуйте ввести значение с плавающей запятой, дату и строку символов, чтобы узнать, как отреагирует на это программа.
* Если программа работает со значениями дат и времени, попробуйте задать ей самые разные даты (в том числе и 29 февраля) и самое разное время суток (в том числе и полночь). Испробуйте не только разные