VBA - Gestione degli errori

Esistono tre tipi di errori nella programmazione: (a) errori di sintassi, (b) errori di runtime e (c) errori logici.

Errori di sintassi

Gli errori di sintassi, chiamati anche errori di analisi, si verificano al momento dell'interpretazione per VBScript. Ad esempio, la riga seguente causa un errore di sintassi perché manca una parentesi di chiusura.

Function ErrorHanlding_Demo()
   dim x,y
   x = "Tutorialspoint"
   y = Ucase(x
End Function

Errori di runtime

Gli errori di runtime, chiamati anche eccezioni, si verificano durante l'esecuzione, dopo l'interpretazione.

Ad esempio, la riga seguente causa un errore di runtime perché qui la sintassi è corretta ma in fase di runtime sta cercando di chiamare fnmultiply, che è una funzione inesistente.

Function ErrorHanlding_Demo1()
   Dim x,y
   x = 10
   y = 20
   z = fnadd(x,y)
   a = fnmultiply(x,y)
End Function

Function fnadd(x,y)
   fnadd = x + y
End Function

Errori logici

Gli errori logici possono essere il tipo di errore più difficile da rintracciare. Questi errori non sono il risultato di un errore di sintassi o di runtime. Invece, si verificano quando commetti un errore nella logica che guida il tuo script e non ottieni il risultato che ti aspettavi.

Non è possibile rilevare questi errori, perché dipende dai requisiti aziendali che tipo di logica si desidera inserire nel programma.

Ad esempio, dividendo un numero per zero o uno script scritto che entra in un ciclo infinito.

Oggetto Err

Supponiamo che se abbiamo un errore di runtime, l'esecuzione si interrompe visualizzando il messaggio di errore. In qualità di sviluppatore, se vogliamo acquisire l'errore, alloraError L'oggetto viene utilizzato.

Esempio

Nell'esempio seguente, Err.Number fornisce il numero di errore e Err.Description fornisce la descrizione dell'errore.

Err.Raise 6   ' Raise an overflow error.
MsgBox "Error # " & CStr(Err.Number) & " " & Err.Description
Err.Clear   ' Clear the error.

Gestione degli errori

VBA abilita una routine di gestione degli errori e può essere utilizzato anche per disabilitare una routine di gestione degli errori. Senza un'istruzione On Error, qualsiasi errore di runtime che si verifica è irreversibile: viene visualizzato un messaggio di errore e l'esecuzione si interrompe improvvisamente.

On Error { GoTo [ line | 0 | -1 ] | Resume Next }

Sr.No. Parola chiave e descrizione
1

GoTo line

Abilita la routine di gestione degli errori che inizia dalla riga specificata nell'argomento di riga richiesto. La riga specificata deve essere nella stessa procedura dell'istruzione On Error, altrimenti si verificherà un errore in fase di compilazione.

2

GoTo 0

Disabilita il gestore degli errori abilitato nella procedura corrente e lo reimposta su Nothing.

3

GoTo -1

Disabilita l'eccezione abilitata nella procedura corrente e la reimposta su Nothing.

4

Resume Next

Specifica che quando si verifica un errore in fase di esecuzione, il controllo passa all'istruzione immediatamente successiva all'istruzione in cui si è verificato l'errore e l'esecuzione continua da quel punto.

Esempio

Public Sub OnErrorDemo()
   On Error GoTo ErrorHandler   ' Enable error-handling routine.
   Dim x, y, z As Integer
   x = 50
   y = 0
   z = x / y   ' Divide by ZERO Error Raises
  
   ErrorHandler:    ' Error-handling routine.
   Select Case Err.Number   ' Evaluate error number.
      Case 10   ' Divide by zero error
         MsgBox ("You attempted to divide by zero!")
      Case Else
         MsgBox "UNKNOWN ERROR  - Error# " & Err.Number & " : " & Err.Description
   End Select
   Resume Next
End Sub