Sommario
In Microsoft Excel VBA, la gestione degli errori è uno dei compiti più importanti. Chi è un coder conosce l'importanza della gestione degli errori per costruire un'applicazione perfetta. Qualsiasi errore in una dichiarazione può ostacolare il codice VBA in molti modi. Pertanto, è necessario essere cauti nel gestire gli errori durante l'esecuzione di un codice VBA. Ci sono molti errori di run-time che si possono incontrare durante l'uso del codice VBA in Excel. Per risolvereuno di essi, utilizziamo il In caso di errore, riprende il prossimo dichiarazione.
In questa esercitazione, si imparerà a utilizzare il metodo In caso di errore, riprende il prossimo in Excel VBA. Questa esercitazione sarà puntuale con esempi appropriati e illustrazioni corrette, quindi rimanete con noi.
Scarica il quaderno di esercizi
VBA Su errore Riprendi successivo.xlsm
Gestione degli errori in Excel VBA
Quando si lavora con Microsoft Excel VBA, si verificano molti errori nelle sottoprocedure. Quando VBA non può eseguire un'istruzione, lancia un errore di esecuzione.
Excel gestisce automaticamente questi errori, per cui quando emerge un errore di esecuzione, visualizza un messaggio di errore predefinito come il seguente:
Ora, è possibile gestire questi aspetti in modo diverso con alcune istruzioni VBA, che verranno illustrate nelle sezioni successive.
Per saperne di più: Come risolvere l'errore #REF! in Excel (6 soluzioni)
Dichiarazioni di errore in VBA
Per gestire gli errori di esecuzione, istruiamo Excel con l'istruzione On Error, che decide che tipo di operazioni eseguire immediatamente dopo. In pratica, disabilitiamo gli errori con questi tipi di gestione degli errori.
In Excel VBA si utilizzano tre tipi di istruzioni On Error (sintassi).
- Su errore Vai a linea
- In caso di errore, riprende il prossimo
- Su errore GoTo 0
Quando si riscontra un errore, si usa il comando On Error. Perché se non si utilizza un comando Su errore Questi errori di esecuzione saranno disastrosi: verrà visualizzato un messaggio di errore e l'esecuzione verrà interrotta.
Quando si utilizza un Su errore si attiva un gestore di errori "attivo". Il gestore di errori "attivo" è un gestore abilitato che avvia l'operazione di gestione degli errori. Se si verifica un errore mentre è coinvolto un gestore di errori, il gestore di errori del metodo corrente non può sopportare l'errore. Dopodiché, il controllo torna alla procedura chiamante.
Se il processo chiamante ha un gestore di errori abilitato, questo viene attivato per gestire l'errore. Se il gestore di errori del sistema chiamante è impegnato in modo corrispondente, il controllo viene restituito tramite le procedure di chiamata precedenti fino a quando non trova un gestore di errori abilitato ma inattivo. Se non riesce a trovare alcun gestore di errori abilitato inattivo, significa che l'errore è catastrofico nel punto in cui si verifica.
Ogni volta che il gestore degli errori restituisce l'autorità a una procedura chiamante, questa evolve la procedura esistente. L'esecuzione riprende nella procedura attuale nel momento selezionato dall'opzione Il curriculum quando un gestore di errori gestisce gli errori in una qualsiasi procedura.
'Su errore riprendi successivo' in VBA
Ora, il In caso di errore, riprende il prossimo indica a VBA di ignorare le righe di codice che presentano errori e di passare immediatamente alla riga di codice successiva. In seguito, il codice VBA di Excel salterà la riga o le righe che contengono errori e passerà alla sequenza di codice successiva.
Il In caso di errore, riprende il prossimo costringe l'esecuzione a riprendere con il comando immediatamente successivo alla riga di codice che ha indotto l'errore di esecuzione. Questa istruzione consente di saltare l'esecuzione anche in presenza di un errore di esecuzione. Se si ritiene che una particolare riga di codice possa produrre un errore, collocare la routine di gestione degli errori in quel punto piuttosto che in un'altra posizione all'interno della procedura. In caso di errore, riprende il prossimo diventa inattiva quando il codice richiama un'altra procedura. Quindi, quando si ha bisogno di una gestione degli errori abbinata a quella routine, è necessario eseguire un'istruzione In caso di errore, riprende il prossimo in ogni modello denominato.
È ragionevole quando la riga di codice che si può saltare non è necessaria per il buon funzionamento della macro, ma ricordate che può essere dannosa se la si usa in modo errato, perché può dare risultati indesiderati.
Ricorda:
L'istruzione On Error Resume Next non risolve gli errori di runtime, ma sostanzialmente ignora gli errori in cui l'esecuzione di VB riprende dall'istruzione che ha generato l'errore di runtime.
Date un'occhiata al codice seguente:
Sub divide() MsgBox 5 / 0 MsgBox 5 / 2 End Sub
Abbiamo provato a dividere 5 con 0 e 1. Eseguiamo il codice, che mostrerà il seguente risultato:
Produce un errore di esecuzione: non è possibile dividere un numero per 0. Quando si esegue il debug del codice, viene visualizzato quanto segue:
Quando il programma VB trova un errore, interrompe immediatamente la procedura e non esegue la riga seguente.
Ora, implementiamo il metodo In caso di errore, riprende il prossimo prima della dichiarazione di errore:
Sub divide() On Error Resume Next MsgBox 5 / 0 MsgBox 5 / 2 End Sub
Dopo aver eseguito il codice, si vedrà quanto segue:
Come si può notare, VBA ignora la riga che produce l'errore e passa immediatamente alla riga di codice successiva. In questo modo, è possibile utilizzare il comando In caso di errore, riprende il prossimo per gestire l'errore in Excel VBA.
Esempi di 'On Error Resume Next' in VBA
Nelle sezioni che seguono, vi fornirò due esempi di In caso di errore, riprende il prossimo che potete implementare nel vostro foglio di lavoro di Excel utilizzando VBA. Vi consiglio di imparare e applicare tutte queste istruzioni alla vostra cartella di lavoro: aumenteranno sicuramente le vostre conoscenze di Excel.
1. Dichiarazione 'On Error Resume Next' per nascondere i fogli di lavoro
In questo esempio, vi mostrerò un codice VBA che nasconderà tutti i fogli di lavoro della cartella di lavoro attiva.
Osservate la seguente schermata:
Qui abbiamo quattro fogli di lavoro, che nasconderemo tutti utilizzando il seguente codice VBA:
Sub hide_all_sheets() Dim copies As Worksheet For Each copies In ActiveWorkbook.Sheets copies.Visible = False Next copies End Sub
Quando si esegue il codice seguente, viene visualizzato il seguente errore di esecuzione:
Excel mostra questo errore perché non è possibile nascondere tutti i fogli di una cartella di lavoro. Pertanto, è necessario ignorare l'errore. Per farlo, è necessario implementare l'istruzione On Error Resume Next nella propria riga di codice.
Sub hide_all_sheets() Dim copies As Worksheet On Error Resume Next For Each copies In ActiveWorkbook.Sheets copies.Visible = False Next copies End Sub
Dopo aver completato l'esecuzione del codice VBA, verrà visualizzato il seguente output:
Alla fine, non si vedrà alcun errore dopo l'esecuzione. Quindi, la nostra istruzione On Error Resume Next ha funzionato molto bene nel codice VBA.
Per saperne di più: Errori in Excel e loro significato (15 errori diversi)
2. Funzione VLOOKUP con 'On Error Resume Next' in VBA
In questo esempio, mostrerò un esempio di la funzione VLOOKUP in VBA Ora, questo codice VBA include anche la funzione In caso di errore, riprende il prossimo dichiarazione.
Osservate la seguente schermata:
Qui si possono vedere i nomi di alcune persone e la loro età. Nella tabella adiacente, si utilizzerà l'opzione VLOOKUP per trovare il nome e l'età della persona.
A tale scopo, digitate il seguente codice:
Sub VLOOKUP_Function() Dim i As Long For i = 5 To 9 Cells(i, 6).Value = WorksheetFunction.VLookup(Cells(i, 5), Range("B:C"), 2, 0) Next i End Sub
Ora eseguite la macro e vedrete il seguente errore:
Si tratta di un errore di run-time. Perché succede? Guardate di nuovo il set di dati:
Come si può vedere, non ci sono dati per "Aaron" ed "Emma". Per questo motivo viene eseguito solo il metodo VLOOKUP per la prima voce, dopodiché interrompe l'esecuzione. Ora, se si vuole ignorare l'errore e procedere alla ricerca delle altre epoche, si può utilizzare l'opzione In caso di errore, riprende il prossimo dichiarazione.
Sub VLOOKUP_Function() Dim i As Long On Error Resume Next For i = 5 To 9 Cells(i, 6).Value = WorksheetFunction.VLookup(Cells(i, 5), Range("B:C"), 2, 0) Next i End Sub
Dopo aver eseguito il codice VBA, verrà visualizzato il seguente risultato:
Come si può vedere, applicando il metodo In caso di errore, riprende il prossimo Il nostro codice VBA non ha trovato i dati di Aaron ed Emma, per cui ha ignorato questi valori e ha restituito il resto dei valori nel foglio di lavoro di Excel.
Ulteriori informazioni: [Corretto] Excel ha riscontrato un problema con uno o più riferimenti a formule in questo foglio di lavoro.
Disattivare 'In caso di errore riprendi il prossimo' con Excel VBA
Ora, potreste trovarvi in una situazione in cui volete ignorare gli errori per un particolare segmento del codice VBA. Ricordate, se usate l'istruzione On Error Resume Next in un codice VBA, salterà tutti gli errori successivi. Ora, se volete disattivare questa funzione e abilitare la gestione degli errori per un altro segmento, usate Su errore GoTo 0 . abiliterà nuovamente la gestione degli errori.
Uso generico:
Sub error_handling()
Per ignorare gli errori
In caso di errore, riprende il prossimo
// righe di codice
Per attivare la gestione degli errori
Su errore GoTo 0
//linee di codice
Fine sub
Osservate il seguente codice VBA:
Sub error_handling() Dim i As Long 'per ignorare l'errore On Error Resume Next For i = 5 To 9 Cells(i, 6).Value = WorksheetFunction.VLookup(Cells(i, 5), Range("B:C"), 2, 0) Next i 'per disattivare in caso di errore resume next On Error GoTo 0 MsgBox i / 0 End Sub
Abbiamo usato il codice precedentemente utilizzato per il VLOOKUP Qui abbiamo aggiunto un ulteriore pezzo di codice per dimostrarlo. Il nostro codice ignorerà gli errori durante l'esecuzione della funzione VLOOKUP ma attiverà la gestione degli errori dopo che il parametro Su errore GoTo 0 dichiarazione.
Per saperne di più: Excel VBA: disattivare l'opzione "In caso di errore riprendi successivo".
VBA 'Su errore GoTo'
In precedenza ho discusso la gestione degli errori con il metodo On Error. L'intero articolo era incentrato su In caso di errore, riprendere il lavoro successivo. Ora, ci sono anche due tipi di gestione degli errori che verranno discussi nelle sezioni seguenti.
1. VBA Su errore Vai a 0
Il Su errore Goto 0 è l'impostazione predefinita di Excel se i codici non contengono un gestore di errori. In pratica implica che quando VBA trova un errore con Su errore GoTo 0 , interromperà l'esecuzione del codice e mostrerà il tradizionale messaggio di errore.
Su errore GoTo 0 non definisce la riga 0 come l'inizio del codice di gestione degli errori, anche se il metodo incorpora una riga numerata con 0.
Date un'occhiata al codice seguente:
Sub on_error_goto_0() Dim copies As Worksheet On Error Resume Next For Each copies In ActiveWorkbook.Sheets copies.Visible = False Next copies On Error GoTo 0 ActiveSheet.Name = "Copy-4" End Sub
Abbiamo già mostrato questo codice, che in pratica nasconde tutti i fogli di lavoro della cartella di lavoro corrente. Ora, in effetti, ho un pezzo di codice aggiuntivo con Su errore GoTo 0 per mostrare l'errore. Se si esegue il codice, si vedrà quanto segue:
L'errore viene visualizzato perché non è possibile avere fogli con lo stesso nome nella cartella di lavoro attiva.
2. Linea VBA On Error GoTo
Ora, si può anche indicare a Excel di eseguire un altro segmento di codice se trova un errore, utilizzando l'opzione Su errore Vai alla riga Indica a Excel di eseguire qualcosa dopo aver trovato un errore.
L'argomento linea è un qualsiasi tag di linea o numero di linea. Se il nostro codice causa un qualsiasi errore di run-time, si sposterà sulla linea, causando il gestore dell'errore attivo nell'esecuzione. Ricordate che la linea definita deve trovarsi nella procedura esatta dell'istruzione On Error, altrimenti causerà un errore di compilazione.
Date un'occhiata al codice seguente:
Sub on_error_goto_line() Dim copies As Worksheet On Error Resume Next For Each copies In ActiveWorkbook.Sheets copies.Visible = False Next copies On Error GoTo error_handler ActiveSheet.Name = "Copy-4" Exit Sub error_handler: MsgBox "Esiste anche un foglio con lo stesso nome. Provare con uno diverso" End Sub
Si è visto il codice nell'esempio precedente. Quando abbiamo usato Su errore GoTo 0 ma qui l'abbiamo sostituita con il comando Su errore Vai alla riga dichiarazione.
Ora, eseguite il codice e vedrete quanto segue:
Come si può vedere, non viene mostrata la finestra di dialogo di errore standard, ma la finestra di messaggio personalizzata creata nel file gestore_di_errori Quando Excel trova un errore, passa al segmento gestore_di_errori e mostra la casella di messaggio.
Abbiamo anche utilizzato un Uscita dal sottomarino Se non c'è un foglio chiamato " VLOOKUP "Il nostro codice VBA rinominerà il foglio attivo. Quindi, dobbiamo terminare l'esecuzione in questo punto, perché non è necessario passare al gestore degli errori e visualizzare la casella di messaggio.
VBA 'Su errore' non funziona in Excel
A volte, per quanto ci si sforzi, il metodo On Error non funziona. In precedenza, abbiamo implementato il metodo Su errore per gestire gli errori, ma a volte mostra errori anche se si usa il metodo In caso di errore, riprende il prossimo o Su errore GoTo 0 Potrebbero esserci diversi motivi nel codice da correggere, ma non ho intenzione di mostrarveli.
Il motivo di base del VBA ' In caso di errore". Non funziona in Excel è attivare l'opzione "Interrompi su tutti gli errori" in Excel.
Seguite questi passaggi per risolvere il problema:
📌 Passi
- Per prima cosa, premere Alt+F11 sulla tastiera per aprire l'editor VBA.
- A questo punto, fare clic su Strumenti> Opzioni.
- Successivamente, fare clic sul pulsante Generale nella scheda Opzioni finestra di dialogo.
- Qui, si può vedere, " Interruzione di tutti gli errori "In pratica impedisce di gestire gli errori.
- Per modificarla, selezionare l'opzione " Interruzione degli errori non gestiti " e fare clic su OK .
Spero che risolva il problema del mancato funzionamento di VBA "On Error" in Excel.
Per saperne di più: Motivi e correzioni dell'errore NAME in Excel (10 esempi)
💬 Cose da ricordare
Su errore riprendere il prossimo non corregge gli errori, ma in pratica ignora l'errore e passa all'istruzione successiva.
✎ Excel cattura e memorizza gli errori di esecuzione nell'oggetto Err. Quando si utilizza l'oggetto In caso di errore, riprende il prossimo cancella le proprietà dell'oggetto Err.
✎ È possibile disattivare il In caso di errore, riprende il prossimo nel codice VBA di Excel aggiungendo l'istruzione Su errore GoTo 0 dichiarazione.
Conclusione
Per concludere, spero che questo tutorial vi abbia fornito un po' di nozioni utili per l'utilizzo del programma In caso di errore, riprende il prossimo in Excel VBA. Vi consiglio di imparare e applicare tutte queste istruzioni al vostro set di dati. Scaricate la cartella di lavoro pratica e provatele voi stessi. Inoltre, sentitevi liberi di dare un feedback nella sezione dei commenti. Il vostro prezioso feedback ci spinge a creare esercitazioni come questa.
Non dimenticate di consultare il nostro sito web Exceldemy.com per vari problemi e soluzioni relativi a Excel.
Continuate a imparare nuovi metodi e a crescere!