Erro no objeto VBA

Conteúdo

# Objeto Err [VBA]

Utilize o objeto VBA Err para gerar ou tratar erros de execução.

Err é um objeto global integrado do VBA que permite:

- para gerar erros Basic predefinidos

- para lançar exceções definidas pelo utilizador

- para indicar a rotina que originou o erro

- para descrever o erro e as possíveis soluções

Esta constante, função ou objeto é ativado através da instrução Option VBASupport 1, colocada antes do código executável do programa num módulo.

O objeto Err do VBA possui as seguintes propriedades e métodos:

## Propriedades

             Err.Description As String

A propriedade Descrição indica a natureza do erro. Description detalha as várias razões que podem estar na origem do erro. Idealmente, apresenta várias medidas a tomar para ajudar a resolver o problema e evitar que volte a ocorrer. O alias «Basic» corresponde à função Error para erros predefinidos do LibreOffice.

             Err.Number As Long

O código de erro associado ao erro. A propriedade predefinida do objeto Err é Number. O alias LibreOffice Basic corresponde à função Err.

             Err.Source As String

Fonte indica o nome da rotina que gera o erro. Fonte é uma opção para erros definidos pelo utilizador.

## Métodos

             Err.Clear()

Redefine a descrição, Erl, o número e as propriedades de origem do erro atual. O alias LibreOffice Basic corresponde à instrução Resume.

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

Lança erros definidos pelo utilizador ou erros predefinidos. O alias básico LibreOffice corresponde à instrução Error.

### Parâmetros

Número: Um código de erro definido pelo utilizador ou predefinido a ser gerado.

O intervalo de códigos de erro 0-2000 está reservado para o LibreOffice Basic. Os erros definidos pelo utilizador podem começar a partir de valores mais elevados, a fim de evitar conflitos com futuros desenvolvimentos do LibreOffice Basic.

Fonte: O nome da rotina que gera o erro. Recomenda-se um nome no formato «myLibrary.myModule.myProc».

Descrição: Uma descrição do problema que levou à interrupção do processo em execução, acompanhada das várias razões que podem estar na origem do mesmo. Recomenda-se uma lista detalhada das possíveis medidas que possam ajudar a resolver o problema.

### Exemplo:

             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, Descrição:="Este é um erro definido pelo utilizador..."
                 Err.Raise(4096, "Standard.Module1.ThrowErrors", aDesc)
                 Exit Sub
             AlertAndExecNext:
                 errTitle = "Erro " & Err & " na linha " & Erl & " em " & Err.Source
                 MsgBox Err.Description, MB_ICONEXCLAMATION, errTitle
                 Resume Next
             End Sub

## Exceção ClassModule

Um pequeno ClassModule, que encapsula o objeto VBA Err, pode disponibilizar as propriedades e métodos do Err para os módulos Basic padrão do LibreOffice.

             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

## Exemplo

             Function Exc As Object
                 Exc = New Exception
             End Function

             Sub aRoutine
             try:
                 On Local Error GoTo catch:
                 Exc.Raise(4096, "myLib.myModule.aRoutine", _
                     "Qualquer descrição com várias linhas para esta exceção definida pelo utilizador")
                 ' o teu código vai aqui …
             finally:
                 Exit Sub
             catch:
                 errTitle = "Erro " & Exc.Number & " na linha " & Erl & " em " & Exc.Source
                 MsgBox Exc.Description, MB_ICONSTOP, errTitle
                 Resume finally
             End Sub

A instrução Error ou um módulo de classe semelhante a uma exceção podem ser utilizados de forma intercambiável, embora este último ofereça funcionalidades adicionais.

Tópicos relacionados

Funções de tratamento de erros

Declaração de classe do módulo opcional

Instrução Option VBASupport

ScriptForge.Exception serviço

Necessitamos da sua ajuda!