Неструктурирано - Unstructured Error Handling
Техника за обработка на грешки,
която се върти около вариации на иструкция On Error... се нарича
неструктурирана (unstructured). Тази техника използва обект
Err и стека за викане (
call stack) на Visual Basic.
-
Обект Err
Вграденият във Visual Basic (built-in) обект за грешки, наречен
Err, е основен за нестуктурирано обработване на грешки.
Този обект има някои свойства и
методи дадени в таблици 1 и 2.
Таблица 1.
| Свойства на обект Err |
Свойство
| Описание |
| Description | Кратък низ (string), описващ
грешката. |
| HelpContext | Контекстното ID за раздела от
help, свързан с грешката. |
| HelpFile | Пълното име на съответния help
(помощен) файл, ако съществува |
| LastDLLError | Върнатият код от функция, която
е външна DLL. |
| Number | Номерът на
грешката. |
| Source | Низът (string), определящ
обекта, който генерира грешката,
примерно pplication.objectname, като например
Excel.Application. |
Таблица 2.
| Методи на обект Err |
| Метод | Описание |
Clear
| Изтрива стойностите на всички
свойства на обект Err.
Err().Clear( ) |
| Raise | Указва на Visual Basic да
генерира runtime error и
установява
стойностите на свойствата на
обект Err равни на параметрите на
метод Raise :
Err.Raise(Number,
Source, Description, _
HelpFile,
HelpContext) |
-
Разчет на грешки при изпълнение - runtime errors
Visual Basic открива грешки при изпълнение
веднага след като грешката се появи, установи свойствата на обект
Err, и посочи локацията, в най-честия случай на реда предвиден от
програмиста с On Error.... Тази локация може да е:
· Реда от кода непосредствено
следващ този, в който е възникнала грешката.
· Друга локация вътре в
offending procedure.
· Процедурата, която вика
offending procedure, ако има такава. Ако
няма, VB изработва съобщение за грешка и
прекъсва праграмата.
-
Обработка на грешка във ред (In-line error handling)
Обработката на грешка може да
бъде "пренасочена" към ред, следващ реда от кода, където ще се открие
грешката, най-често с инструкция On Error и тогава записът е такъв:
On
Error Resume Next
Нарича се обработка на грешка във
ред (
in-line error handling).
Ето един пример за преименуване
на файл:
Dim
sOldName, sNewName As String
On
Error Resume Next
' пита за съществуващо
име на файл - file name
sOldName
= InputBox("Enter the file name to rename")
' пита за ново име на
файл - new name
sNewName
= InputBox("Enter the new file name")
' преименоване на файла -
Rename file
Rename("c:"
& sOldName, "c:" & sNewName)
' Deal with error
If
Err( ).Number = 53 Then
' грешка от ненамерен
файл - File not found error
MsgBox("File
" & sOldName & " not found")
Exit
Sub
Else
' всички други грешки - errors
MsgBox(Err().Number
& ": " & Err( ).Description)
Exit
Sub
End
If