|
||||||||
|
Как обрабатывать ошибкиПроцедуры, написанные на Visual Basic, казалось бы, вообще не нуждаются в обработке ошибок. Но на самом деле часто возникают проблемы, связанные с оборудованием или непредвиденными действиями пользователя. Они могут вызвать ошибки периода выполнения, из-за которых Ваша программа просто прекратит свою работу. Некоторые ошибки не столь фатальны, но из-за них поведение программы может стать совершенно непредсказуемым. Например, следующая процедура возвращает True, если указанный файл существует, и False, если его нет, и при этом не содержит никакого кода обработки ошибок:
Функция Dir возвращает первый файл, соответствующий заданной строке (она может содержать знаки подстановки, имя диска и путь), или строку нулевой длины, если такого файла не найдено. На первый взгляд кажется, что в функции предусмотрена обработка любого результата вызова Dir. Однако, если функции передано имя несуществующего диска, возникнет ошибка ?устройство не доступно?. Если указанный диск является дисководом (приводом для гибких дисков), функция будет работать правильно, только когда в дисковод вставлена дискета. Если ее там нет, Visual Basic выдаст сообщение об ошибке ?диск не готов? и прекратит выполнение Вашей программы. Чтобы избежать этой ситуации, используйте средства обработки ошибок, предусмотренные в Visual Basic; это позволит перехватить ошибку и должным образом обработать ее. Когда возникает ошибка, Visual Basic устанавливает ряд свойств объекта Err ? код ошибки, ее описание и т. п. Вы можете задействовать этот объект и его свойства в подпрограмме обработки ошибок, с тем чтобы Ваше приложение ?разумно? реагировало на их появление. Например, аппаратные проблемы (недопустимое имя диска или пустой дисковод) можно было бы обрабатывать так:
Свойство Number объекта Err содержит код ошибки периода выполнения, а свойство Description ? ее краткое описание. Когда Visual Basic генерирует ошибку ?диск не готов?, программа выводит сообщение, позволяющее выбрать одну из двух кнопок - OK или Cancel. Если пользователь выберет ОК, оператор Resume передаст управление команде, вызвавшей ошибку, и попытается выполнить ее повторно. Если пользователь исправил ситуацию, нормальное выполнение программы продолжится; в ином случае управление вернется обработчику ошибок. Если же пользователь выберет Cancel, оператор Resume Next передаст управление команде, следующей за той, что вызвала ошибку (в нашем случае - оператору Exit Function). При появлении ошибки ?устройство не доступно?, программа выведет сообщение о возникшей проблеме. После этого оператор Resume Next передаст управление команде, следующей за той, что вызвала ошибку. Если же произойдет некая непредвиденная ошибка, программа выведет краткое описание ошибки, после чего прекратит свою работу оператором Stop. Ваша программа может исправить ошибку или предложить изменить условия, вызвавшие эту ошибку. Для этого используйте те же приемы, что и в предыдущем примере. В следующем разделе мы рассмотрим эти приемы подробнее.
Текст пособия подготовлен на основе материалов книги Microsoft Corporation. Руководство программиста по Visual Basic для Microsoft Office 97 / Пер. с англ. - М.: Издательский отдел "Русская Редакция" ТОО "Channel Trading Ltd.", 1997. - 544 с.: илл. c Оригинальное издание на английском языке, Microsoft Corporation, 1997 c Русский перевод, Microsoft Corporation, 1997 |