Обект Err [VBA]

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

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

warning

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


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

Свойства


         Err.Description As String
      

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


         Err.Number As Long
      

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


         Err.Source As String
      

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

Методи


         Err.Clear()
      

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


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

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

Параметри

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

note

Диапазонът 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

tip

Кратък модул на клас (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
      
note

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


Моля, подкрепете ни!