Обратите внимание на формат метки SpecialValue - она размещается в своей отдельной строке и заканчивается двоеточием. Двоеточие здесь просто обязательно - при его отсутствии VBA непременно расстроится и выведет сообщение об ошибке.
Использование оператора Go To считается в программировании признаком низкого качества. Дело в том, что использование этого оператора превращает программный код в "спагетти", когда путь выполнения программы скачет туда-сюда через всю программу. "Спагетти" трудно распутывать, а программный код по мере увеличения в нем числа операторов Go To быстро становится невозможным для чтения. Всегда, когда это возможно, используйте управляющие структуры, позволяющие программе выполняться последовательно.
Но иногда оператор Go To оказывается самым естественным способом для того, чтобы заставить программу делать то, что вам нужно. Может быть, ваша голова уже до предела нагружена невероятным сплетением вложенных циклов и условных операторов, требующих сложного множества критериев. В таких случаях оператор Go To проложит прямую дорогу к выходу из лабиринта, только не используйте его слишком часто.
В этой главе ...
~ Каталог всевозможных ошибок, стремящихся "одурачить" вашу программу
~ Принципы борьбы с ошибками
~ Замечательная возможность - режим паузы
~ Все средства отладки редактора 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.