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