Come ignorare gli errori utilizzando VBA On Error Resume Next Statement?

Excel VBA in caso di errore Riprendi successivo

VBA On Error Resume Next è un'istruzione del gestore degli errori. Se l'errore si verifica durante l'esecuzione del codice invece di mostrare l'errore per riprendere la riga di codice successiva ignorando il messaggio di errore, è possibile utilizzare questa istruzione.

Coloro che scrivono codici regolarmente in Excel VBA sanno che potrebbero ricevere errori anche dopo aver scritto codici competenti, ma vogliono ignorare quell'errore e continuare a correre con le righe di codice successive. Un tipico esempio di visualizzazione di un messaggio di errore è quando la funzione del foglio di lavoro CERCA.VERT non trova il valore di ricerca dalla matrice della tabella. Non restituirà l'errore # N / A; piuttosto, genererà l'errore. Come "Impossibile ottenere la proprietà CERCA.VERT della classe di funzioni del foglio di lavoro".

Se non sai perché stiamo ricevendo questo errore, allora è molto difficile correggere il bug. In VBA, abbiamo una funzione chiamata " On Error Resume Next ".

Cosa fa On Error Resume Next in VBA?

Ci sono alcune aree come programmatore. Sapremo per certo che questo darà un messaggio di errore, ma dobbiamo ignorare questo errore per continuare a leggere il codice, quindi come ignorare quell'errore è il dubbio comune che tutti hanno.

Utilizzando l'istruzione VBA On Error Resume Next, possiamo ignorare l'errore e riprendere la riga di codice successiva.

Esempio 1

Supponi di avere molti fogli di lavoro e di nasconderne alcuni come parte del progetto VBA. Ad esempio, di seguito sono riportati i fogli di lavoro che ho nel mio foglio di lavoro.

Ho scritto dei codici per nascondere i fogli "Vendite e" Profitto "e sotto c'è il codice.

Codice:

Sub On_Error () Worksheets ("Sales"). Visible = xlVeryHidden Worksheets ("Profit 2019"). Visible = xlVeryHidden Worksheets ("Profit"). Visible = xlVeryHidden End Sub

Ora inizierò a eseguire il codice riga per riga usando il tasto F8 .

Se premo ancora una volta il tasto F8 , verrà nascosto il foglio denominato " Vendite ".

Ora premi ancora una volta il tasto F8 e guarda cosa succede.

Abbiamo ricevuto un errore "Indice fuori intervallo" perché la riga di codice corrente dice quanto segue.

Fogli di lavoro ("Profitto 2019"). Visible = xlVeryHidden

Sta tentando di nascondere il foglio di lavoro denominato " Profit 2019 " , ma non esiste un foglio di lavoro con il nome "Profit 2019".

In questi casi, se il foglio di lavoro non esiste nella cartella di lavoro, dobbiamo ignorare l'errore e continuare a eseguire il codice ignorando l'errore "Indice fuori intervallo".

La riga successiva nel codice dice

Fogli di lavoro ("Profit"). Visible = xlVeryHidden

Questo foglio di lavoro esiste in questa cartella di lavoro, quindi senza ignorare l'errore, non possiamo passare a questa riga di codice.

Per ignorare questo errore, è necessario aggiungere l'istruzione "On Error Resume Next".

Codice:

Sub On_Error () On Error Resume Next Worksheets ("Sales"). Visible = xlVeryHidden Worksheets ("Profit 2019"). Visible = xlVeryHidden Worksheets ("Profit"). Visible = xlVeryHidden End Sub

Come puoi vedere sopra, ho aggiunto l'istruzione all'inizio del codice prima dell'inizio di qualsiasi riga. Ora esegui il codice e guarda cosa succede.

Ora sono nella riga a cui è stato dato l'errore in precedenza, premere il tasto F8 e vedere cosa succede.

Sono passato alla riga di codice successiva senza mostrare alcun errore a causa dell'istruzione che abbiamo aggiunto in alto, che è l'istruzione VBA "On Error Resume Next".

Esempio n. 2

Ora vedremo come utilizzare questa affermazione con un altro esempio. Guarda la struttura dati di seguito per questo esempio.

Abbiamo due tabelle sopra la prima tabella che hanno il nome Emp e i dettagli dello stipendio nella seconda tabella, e abbiamo solo il nome Emp, quindi utilizzando VLOOKUP, dobbiamo recuperare i dettagli dello stipendio dalla tabella di sinistra.

Di seguito è riportato il codice che avevo scritto per recuperare i dettagli.

Codice:

Sub On_Error1 () Dim k As Long For k = 2-8 Cells (k, 6) .Value = WorksheetFunction.VLookup (Cells (k, 5), Range ("A: B"), 2, 0) Next k End Sub

Ora esegui il codice riga per riga e guarda cosa succede.

Dopo aver eseguito il primo codice cella, abbiamo ottenuto il risultato per il primo dipendente. Ripeti lo stesso anche per il secondo dipendente.

Questa volta abbiamo ricevuto il messaggio di errore. Diamo un'occhiata al secondo nome del dipendente nella tabella.

The second employee name is “Gayathri,” but this name doesn’t not exists in the first table, so the VBA VLOOKUP function doesn’t return “#N/A” error when the VLOOKUP doesn’t find the lookup value from the table; rather, it gives the above error message.

Our aim is if the employee name doesn’t find in the table, then we need an empty cell for that employee and ignore the error and give results for the remaining names.

We need to add the “On Error Resume Next” statement inside the loop.

Code:

Sub On_Error1() Dim k As Long For k = 2 To 8 On Error Resume Next Cells(k, 6).Value = WorksheetFunction.VLookup(Cells(k, 5), Range("A:B"), 2, 0) Next k End Sub

Now run the code and see the result.

Due nomi di dipendenti, " Gayathri & Karanveer " , non sono presenti nell'elenco, quindi quei codici di riga devono aver riscontrato un errore poiché abbiamo aggiunto un'istruzione del gestore degli errori " On Error Resume Next " ha ignorato quella riga di codice e ha ripreso per il prossimo dipendente.

Cose da ricordare qui

  • "On Error Resume Next" è l'istruzione del gestore degli errori quando è necessario ignorare l'errore noto.
  • Se si desidera ignorare il messaggio di errore solo per un insieme specifico di codice, chiudere l'istruzione on error resume next aggiungendo l'istruzione " On Error GoTo 0 ".

Articoli interessanti...