In VBA, a volte vogliamo uscire dal programma dopo che alcune condizioni sono vere. Ma io uso end
o exit sub
?Qual è la deferenza tra "end" e "exit sub" in VBA?
risposta
Questo è un po 'al di fuori della portata della domanda, ma per evitare qualsiasi potenziale confusione per i lettori che sono nuovi a VBA: End
e End Sub
non sono la stessa cosa. Non svolgono lo stesso compito.
End
interrompe l'esecuzione di TUTTO il codice e si dovrebbe quasi sempre utilizzare Exit Sub
(o Exit Function
, rispettivamente).
L'arresto interrompe TUTTA l'esecuzione. Mentre questo sembra allettante farlo cancella anche tutte le variabili globali e statiche. (source)
Vedi anche la DOX MSDN per il End Statement
Quando viene eseguito, la dichiarazione
End
azzera allmodule-livello variabili e tutte le variabili locali statiche in allmodules. Per preservare il valore di queste variabili, utilizzare invece l'istruzioneStop
. È quindi possibile riprendere l'esecuzione preservando il valore di tali variabili.Nota L'istruzione
End
interrompe bruscamente l'esecuzione del codice, senza richiamare l'evento Unload, QueryUnload o Terminate o qualsiasi altro codice Visual Basic. Il codice che hai inserito negli eventi Unload, QueryUnload e Terminate offorms andclass non viene eseguito. Gli oggetti creati dai moduli di classe vengono distrutti, i file aperti con l'istruzione Open vengono chiusi e la memoria utilizzata dal programma viene liberata. I riferimenti a oggetti detenuti da altri programmi sono invalidati.
Né è End Sub
e Exit Sub
lo stesso. End Sub
non può essere chiamato nello stesso modo Exit Sub
può essere, perché il compilatore non lo consente.
Questo significa ancora una volta che dovete Exit Sub
, che è un perfectly legal operation:
Exit Sub
esce immediatamente la routine Sub in cui appare. L'esecuzione continua con la dichiarazione che segue la dichiarazione che ha chiamato la procedura Sub. Exit Sub può essere utilizzato solo all'interno di una procedura Sub .
Inoltre, e una volta capito come funzionano le procedure, ovviamente, End Sub
non cancella alcuna variabile globale.Ma lo fa clear local (Dim'd) variables:
End Sub
Termina la definizione di questa procedura.
vedere la mia risposta qui sotto. –