2016-04-08 10 views

risposta

19

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'istruzione Stop. È 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.

enter image description here

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.