VBA On Error Riprendi Avanti o Vai a 0

Questo tutorial spiegherà VBA On Error Resume Next e Goto Statement.

Anche quando il tuo codice è perfettamente costruito, l'utente potrebbe non agire come ti aspetteresti. Per questo motivo è necessario inserire gestori di errori nel codice ogni volta che potrebbe esserci un motivo per cui potrebbe verificarsi un errore.

In caso di errore Riprendi Avanti

L'istruzione On Error Resume Next indica a VBA di saltare qualsiasi riga di codice contenente errori e di passare alla riga successiva. VBA ignorerà la riga o le righe con un errore e passerà alla riga di codice successiva.

Ciò è utile quando la riga di codice che può essere ignorata non è fondamentale per l'esecuzione corretta della macro, ma può essere piuttosto pericolosa se utilizzata in modo errato poiché potrebbe dare risultati non intenzionali.

Ad esempio, nella procedura seguente:

123456 Sub NascondiTuttiFogli()Dim ws come foglio di lavoroPer ogni ws in ActiveWorkbook.Sheetsws.Visible = FalseAvanti wFine sottotitolo

Se eseguiamo questo codice, riceveremo un errore poiché non possiamo nascondere tutti i fogli di lavoro in una cartella di lavoro: almeno una cartella di lavoro deve rimanere visibile.

Tuttavia, se modifichiamo la procedura come mostrato di seguito, il codice continuerà oltre l'errore e lascerà visibile l'ultimo foglio nella cartella di lavoro.

1234567 Sub NascondiTuttiFogli()In caso di errore Riprendi AvantiDim ws come foglio di lavoroPer ogni ws in ActiveWorkbook.Sheetsws.Visible = FalseAvanti wFine sottotitolo

In caso di errore Vai a 0

Se non abbiamo un gestore di errori nel nostro codice, In caso di errore Vai a 0 è l'impostazione predefinita di Excel. Ciò significa sostanzialmente che quando si verifica un errore con In caso di errore Vai a 0, VBA interromperà l'esecuzione del codice e visualizzerà la finestra del messaggio di errore standard, ad esempio:

Se abbiamo messo una trappola di errore come In caso di errore Riprendi Avanti nel nostro codice, ma poi desideriamo reimpostare l'errore al valore predefinito, possiamo inserire un In caso di errore Vai a 0 riga nel nostro codice.

12345678910 Sub ErrorGoTo0()In caso di errore Riprendi AvantiDim ws come foglio di lavoroPer ogni ws in ActiveWorkbook.Sheetsws.Visible = FalseAvanti wIn caso di errore Vai a 0'Esegui più codice qui per esempio:ActiveSheet.Name = "Foglio1"Fine sottotitolo

Ora, se ci fosse qualche errore nel nostro codice dopo il In caso di errore Vai a 0 linea, si sarebbe verificato il messaggio di errore predefinito per Excel. In questo esempio, abbiamo già un foglio chiamato Sheet1 nell'ActiveWorkbook come il codice sopra il In caso di errore Vai a 0 nasconde il foglio, ma non lo elimina. Verrà quindi visualizzato il messaggio di errore di Excel predefinito che indica che il nome del foglio è già stato preso.

In caso di errore Vai a Linea

Possiamo anche forzare il nostro codice a spostarsi su una riga di codice diversa usando il In caso di errore Vai a Linea che dice a VBA di passare a una riga di codice specifica se si verifica un errore.

123456789101112 Sub ErrorGoToLine()In caso di errore Riprendi AvantiDim ws come foglio di lavoroPer ogni ws in ActiveWorkbook.Sheetsws.Visible = FalseAvanti wIn caso di errore GoTo errhandlerActiveSheet.Name = "Foglio1"Esci Sottocommesso viaggiatore:MsgBox("C'è già un foglio chiamato sheet1!", vbCritical)Fine sottotitolo

Nell'esempio sopra, quando il codice trova il foglio "Foglio1", si sposta sulla riga di codice sotto l'etichetta del gestore degli errori - in questo caso chiama una finestra di messaggio personalizzata che informa gli utenti che il foglio è già uscito. L'etichetta del gestore degli errori deve avere i due punti dopo di essa per mostrare a VBA che si tratta di un'etichetta.

1 commesso:

Il codice passerà quindi alla riga sotto l'etichetta e restituirà la finestra di messaggio personalizzata.

Ciò è utile quando non si desidera che l'utente possa fare clic su Debug per accedere al codice poiché il messaggio Excel standard offre sempre un'opzione per eseguire il debug del codice.

Abbiamo anche bisogno di un Esci Sotto nella procedura. Se c'è NON un foglio chiamato Sheet1, quindi quella riga di codice verrebbe eseguita e rinominerebbe il foglio attivo in Sheet1. Vogliamo quindi che il codice termini - non vogliamo che continui al gestore degli errori e mostri la finestra di messaggio. La riga Exit Sub quindi esce dalla procedura e interrompe il codice.

Aiuterete lo sviluppo del sito, condividere la pagina con i tuoi amici

wave wave wave wave wave