VBA in caso di errore

Excel VBA sull'istruzione di errore

L' istruzione VBA On Error è un tipo di meccanismo di gestione degli errori che viene utilizzato per guidare il codice a fare cosa succede se incontra un qualsiasi tipo di errore, generalmente quando un codice incontra un errore l'esecuzione si interrompe ma con questa istruzione nel codice l'esecuzione del il codice continua poiché dispone di una serie di istruzioni da eseguire quando incontra un errore.

Anticipare l'errore nel codice ti rende un professionista nella codifica VBA. Non puoi rendere il codice efficiente al 100%, anche se sei sicuro del tuo codice in un modo o nell'altro potrebbe generare un errore.

È quasi un compito impossibile identificare e gestire ogni tipo di errore, ma abbiamo diversi modi per gestire un errore in VBA. Durante la scrittura del codice potresti non prevedere il tipo di codice di errore che può generare, ma se si verifica un errore, passerai più tempo nel debug che nella scrittura del codice stesso.

Cos'è un errore?

Un errore non è altro che una riga di codice che non può essere eseguita a causa della funzionalità o del codice sbagliato. Quindi cerca di anticipare l'errore e gestirlo.

Ad esempio, se provi a cancellare il foglio che non c'è, ovviamente non possiamo eseguire quella riga di codice.

Un errore è di tre tipi, uno è un errore compilato a causa di variabili non dichiarate. Il secondo è un errore di immissione dei dati dovuto a voci errate da parte del programmatore e il terzo è un errore di runtime dovuto al fatto che VBA non è in grado di riconoscere la riga di codice. Per tentare di accedere o lavorare su un foglio di lavoro o una cartella di lavoro che non è presente.

Ma abbiamo un'istruzione in VBA per gestire tutti questi tipi di errori, ad esempio l'istruzione "On Error".

Tipi di dichiarazioni di errore

Il punto chiave della gestione degli errori in VBA è l'istruzione "On Error". Ad esempio, in caso di errore "riprendi la riga successiva", "vai a o passa a un'altra riga", ecc ...

L'istruzione On Error ha tre tipi di istruzioni.

  1. GoTo 0  significa che ogni volta che si verifica un errore di run-time, Excel o VBA dovrebbero visualizzare la finestra di messaggio di errore che indica il tipo di errore che ha riscontrato. Non appena VBA esegue il codice, disabilita tutti i gestori di errori in quel particolare blocco del codice.
  2. Resume Next significa che ogni volta che si verifica l'errore, questa istruzione indica a Excel di ignorare quell'errore e di passare alla riga di codice successiva (riprendi dopo) senza visualizzare alcun messaggio di errore. Non significa che risolverà l'errore, ma ignora semplicemente l'errore.
  3. Vai a [etichetta] significa che ogni volta che VBA rileva un errore, vai all'etichetta assegnata. Questo fa sì che il codice salti alla riga specifica fornita dal programmatore.

I 3 modi principali per gestire gli errori in VBA

Puoi scaricare questo modello VBA su errore qui - Modello VBA su errore

# 1 - In caso di errore, riprendi dopo

Supponiamo di dover dividere il valore di 20 per 0 e di aver dichiarato la variabile per assegnarle il risultato della divisione.

Codice:

 Sub OnError_Example1 () Dim i As Integer i = 20/0 End Sub 

Se esegui questo codice, verrà generato l'errore seguente.

Quindi non puoi dividere alcun numero per zero. Il numero di errore in fase di esecuzione è 11, ovvero divisione per zero.

Ora aggiungerò un'altra riga al codice.

Codice:

 Sub OnError_Example1 () Dim i As Integer, j As Integer i = 20/0 j = 20/2 End Sub 

Ora aggiungerò la seguente dichiarazione In caso di errore riprendi in alto.

Codice:

 Sub OnError_Example1 () Dim i As Integer, j As Integer On Error Resume Next i = 20/0 j = 20/2 End Sub 

Ora se eseguo questo codice non mi darà alcun messaggio di errore piuttosto eseguirà la riga di codice successiva, cioè j = 20/2.

# 2 - Etichetta GoTo in caso di errore

Ho dichiarato tre variabili.

Codice:

 Sub OnError_Example1 () Dim i As Integer, j As Integer, k As Integer 

Per tutte queste tre variabili assegnerò il calcolo della divisione.

Codice:

 Sub OnError_Example1 () Dim i As Integer, j As Integer, k As Integer i = 20/0 j = 20/2 k = 10/5

Il risultato di tutti questi tre calcoli verrà visualizzato nella finestra del messaggio.

Codice:

 Sub OnError_Example1 () Dim i As Integer, j As Integer, k As Integer i = 20/0 j = 20/2 k = 10/5 MsgBox "Il valore di i è" & i & vbNewLine & "Il valore di j è "& j & _ vbNewLine &" Il valore di k è "& k & vbNewLine End Sub 

Ora cercherò di eseguire questo codice poiché il calcolo di "I" non è corretto, otterremo l'errore 11 di runtime.

Ora aggiungerò l'istruzione "On Error Resume Next".

Codice:

 Sub OnError_Example1 () Dim i As Integer, j As Integer, k As Integer On Error Resume Next i = 20/0 j = 20/2 k = 10/5 MsgBox "Il valore di i è" & i & vbNewLine & "Il il valore di j è "& j & _ vbNewLine &" Il valore di k è "& k & vbNewLine End Sub 

Se lo eseguo, salterà il calcolo "I" ed eseguirà i restanti due calcoli e il risultato è il seguente.

Ora invece di "On Error Resume Next" aggiungerò "On Error GoTo KCalculation"

Codice:

 Sub OnError_Example1 () Dim i As Integer, j As Integer, k As Integer On Error GoTo KCalculation: i = 20/0 j = 20/2 KCalculation: k = 10/5 MsgBox "Il valore di i è" & i & vbNewLine & "Il valore di j è" & j & _ vbNewLine & "Il valore di k è" & k & vbNewLine End Sub 

Nota: qui "KCalculation" è il nome dell'etichetta che avevo dato, puoi dare il tuo nome all'etichetta senza spazio.

Ora, se eseguo questa riga di codice, non salterà alla riga successiva, ma salterà al nome dell'etichetta che ho inserito, cioè "KCalcualtion". Qui ignorerà l'errore dato da "I" e inoltre non eseguirà il calcolo "j" ma salterà immediatamente a "KCalcualtion".

# 3 - Stampa il numero di errore in VBA

Alla fine del codice, possiamo anche stampare il numero di errore in una finestra di messaggio separata. La seguente riga di codice farà questo lavoro.

Codice:

Numero errore

Ora eseguirò questo codice, la prima finestra di messaggio mostrerà i risultati del calcolo.

Fare clic su OK, verrà visualizzata un'altra finestra di messaggio per mostrare il numero di errore.

Il risultato è 11, ovvero Divisione per Zero.

We can also get the error description instead of the number. We just need to change the code, below is the code.

Code:

Err.Description

It will show a description like this.

Things to Remember

  • After entering “On Error Resume Next” at the end of code don’t forget to add the statement “On Error GoTo 0”
  • The label name should be the same in both places.
  • Label names need not be defined well in advance.
  • In the end, always see what was the error occurred through the separate message box.