|
Сервер поддерживается
кафедрой информатики и вычислительной техники ГрГУ
тел. +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
|