Обект Err на VBA

Съдържание
Индекс 🔎︎

# Обект Err [VBA]

Обектът Err служи за генериране и обработка на грешки по време на изпълнение.

Err е вграден глобален обект на VBA, който позволява:

- да се генерират предварително дефинираните грешки на Basic;

- да се генерират потребителски изключения;

- да се именува подпрограмата, предизвикала грешката;

- да се описва грешката и възможните решения.

Тази константа, функция или обект се разрешава с оператора Option VBASupport 1, поставен преди изпълнимия програмен код в модула.

Обектът Err на VBA има следните свойства и методи:

## Свойства

             Err.Description As String

Свойството Description описва естеството на грешката. В Description са изброени възможните причини за възникването на грешката. В идеалния случай то би трябвало да предлага няколко подхода за разрешаване на проблема и предотвратяване на повторната му поява. Негов псевдоним в Basic е функцията Error на Basic за предварително дефинираните грешки на LibreOffice.

             Err.Number As Long

Кодът за грешка, съответстващ на грешката. Подразбираното свойство на обекта Err е Number. Псевдонимът в LibreOffice Basic е функцията Err.

             Err.Source As String

Source указва името на подпрограмата, предизвикала грешката. Source е незадължително за дефинирани от потребителя грешки.

## Методи

             Err.Clear()

Нулира свойствата за описание, Erl, номер и източник на текущата грешка. Псевдонимът в LibreOffice Basic е операторът Resume.

             Err.Raise(Number As Long, Optional source As String, Optional description As String)

Генерира потребителски или предварително дефинирани грешки. Псевдонимът в LibreOffice Basic е операторът Error.

### Параметри

Number: дефиниран от потребителя или предварително дефиниран код на грешка, който да се генерира.

Диапазонът 0 – 2000 от кодове на грешки е запазен за LibreOffice Basic. Потребителските грешки може да започват от по-високи стойности, за да се предотврати конфликт с бъдещи разширения на LibreOffice Basic.

Source: името на подпрограмата, генерираща грешката. Препоръчва се име във вида „библиотека.модул.процедура“.

Description: описание на проблема, водещ до спиране на изпълнявания процес, придружено с възможните причини за възникването му. Препоръчва се подробен списък на възможните подходи за решаване на проблема.

### Пример:

             Option VBASupport 1

             Sub ThrowErrors
                 Dim aDesc As String : aDesc = Space(80)
                 On Local Error GoTo AlertAndExecNext
                 Err.Raise(91, "ThrowErrors", Error(91))
                 Err.Raise 2020, Description:="Това е преднамерена дефинирана от потребителя грешка…"
                 Err.Raise(4096, "Standard.Module1.ThrowErrors", aDesc)
                 Exit Sub
             AlertAndExecNext:
                 errTitle = "Грешка "& Err &" на ред "& Erl &" в "& Err.Source
                 MsgBox Err.Description, MB_ICONEXCLAMATION, errTitle
                 Resume Next
             End Sub

## Модул на клас Exception

Кратък модул на клас (ClassModule), който обвива обекта Err на VBA и може да разпространява свойства и методи на Err за стандартни модули на LibreOffice Basic.

             Option ClassModule
             Option VBASupport 1

             Public Property Get Description As String
                 Description = Err.Description
             End Property
             Public Property Get Number As Long
                 Number = Err.Number
             End Property
             Public Property Get Source As String
                 Source = Err.Source
             End Property
             Public Sub Clear
                 Err.Clear
             End Sub
             Public Sub Raise( number As Long, Optional Source As String, Optional Description As String)
                 Err.Raise number, Source, Description
             End Sub

## Пример

             Function Exc As Object
                 Exc = New Exception
             End Function

             Sub aRoutine
             try:
                 On Local Error GoTo catch:
                 Exc.Raise(4096, "myLib.myModule.aRoutine", _
                     "Описание на няколко реда за това дефинирано от потребителя изключение")
                 ' място за вашия код
             finally:
                 Exit Sub
             catch:
                 errTitle = "Грешка "& Exc.Number &" на ред "& Erl &" в "& Exc.Source
                 MsgBox Exc.Description, MB_ICONSTOP, errTitle
                 Resume finally
             End Sub

Операторът Error може да се използва като алтернатива на модул с клас, подобен на Exception, но последният предлага допълнителни възможности.

Теми, свързани с показаната

Функции за обработка на грешки

Оператор Option ClassModule

Оператор Option VBASupport