Вход


Главная страница >> Учебный процесс >> Конспекты >> MS Office. Руководство программиста по Visual Basic для MS Office 97 >> Отладка и обработка ошибок >> Создание обработчика ошибок >> Выход из подпрограммы обработки ошибок >> Возобновление выполнения с определенной строки

Переход на главную страницу

Сервер поддерживается
кафедрой информатики и вычислительной техники ГрГУ
тел. +375-(0)152-445-101
E-mail :
kadan@grsu.grodno.by


[Назад]    [Содержание ]    [Вперед]

  


Возобновление выполнения с определенной строки


Оператор Resume Next подходит и в том случае, когда ошибка возникает внутри цикла и Вам нужно перезапустить операцию. В качестве альтернативы можно использовать оператор Resume метка, который возобновляет выполнение с определенной строки.

Ниже приведен пример, иллюстрирующий применение оператора Resume метка. Это вариант уже рассмотренной нами функции FileExists; он позволяет ввести спецификацию, передаваемую функции Dir для поиска заданного файла (файлов).

Function VerityFile As String

═════Const mnErrBadFileName = 52, mnErrDriveDoorOpen = 71
═════Const mnErrDeviceUnavailable = 68, mnErrInvalidFileName = 64
═════Dim strPrompt As String, strMsg As String, strFileSpec As String
═════strPrompt = "Enter file specification to check:"

StartHere:
═════strFileSpec = "*.*" ═════'
спецификация по умолчанию
═════strMsg = strMsg & vbCRLF & strPrompt
═════?
даем возможность изменить исходную спецификацию
═════strFileSpec = lnputBox(strMsg, "File Search", _
══════════strFileSpec, 100, 100)

═════' завершаем работу, если пользователь не указал спецификацию
═════If strFileSpec = "" Then Exit Function

═════On Error GoTo Handler
═════VerifyFile = Dir(FileSpec)
═════Exit Function

Handler:
═════Select Case Err. Number
══════════'
анализируем код ошибки и формируем сообщение
══════════Case mnErrInvalldFileName, mnErrBadFileName
═══════════════strMsg = "Your file specification was invalid; _
════════════════════try another."
══════════Case mnErrDriveDoorOpen
═══════════════strMsg = "Close the disk drive door and try again."
══════════Case mnErrDeviceUnavailable
═══════════════strMsg = "The drive you specified was not found. Try again. "
══════════Case Else
═══════════════Dim intErrNum As Integer
═══════════════intErrNum = Err. Number
═══════════════Err. Clear ' сбрасываем объект Err
═══════════════Err. Raise Number := intErrNum ' повторно генерируем ошибку
═════End Select

═════Resume StartHere ══' переходим к метке StartHere и даем
════════════════════════════════════════?
возможность указать другое имя файла
End Function

Если файл, отвечающий спецификации, найден, функция возвращает имя файла, а иначе ? строку нулевой длины. Если возникает одна из ожидаемых ошибок, в переменную strMsg записывается соответствующее сообщение, и программа возвращается к метке StartHere. Это дает еще один шанс ввести корректные путь и спецификацию файла.

В случае непредвиденной ошибки блок Case Else повторно вызовет ошибку, чтобы ее мог перехватить следующий обработчик в списке вызовов. Это необходимо, так как иначе выполнение возобновится со строки Resume StartHere. Повторно вызывая ошибку, Вы даете возможность перехватить ее другому обработчику, который находится на следующем уровне в стеке вызовов.



[Назад]    [Содержание ]    [Вперед]

  



Текст пособия подготовлен на основе материалов книги
Microsoft Corporation. Руководство программиста по Visual Basic для Microsoft Office 97 / Пер. с англ. - М.: Издательский отдел "Русская Редакция" ТОО "Channel Trading Ltd.", 1997. - 544 с.: илл.
c Оригинальное издание на английском языке,
Microsoft Corporation, 1997
c Русский перевод,
Microsoft Corporation, 1997

  
За содержание страницы отвечает Гончарова М.Н.
©
Кафедра СПиКБ, 2002-2017