VBA Exit Sub - Ieșiți din subprocedura VBA dacă nu sunt îndeplinite condițiile

Excel VBA Exit Sub Procedură

Instrucțiunea Exit Sub iese din subprocedură mai devreme decât liniile definite ale codurilor VBA. Cu toate acestea, pentru a ieși din subprocedură trebuie să aplicăm un fel de test logic.

Să construim acest lucru în termeni simpli.

Sub MacroName () '…' Un cod aici '… Ieșiți din Sub' Ieșiți din Sub fără a executa alte linii de cod de mai jos '…' Acest cod va fi ignorat '… End Sub

Exemple

Exemplul nr. 1

Pentru un exemplu mai bun, uitați-vă la codul de mai jos.

Cod:

Sub Exit_Example1 () Dim k As Long For k = 1 To 10 Cell (k, 1). Valoare = k Next k End Sub

Codul de mai sus va insera numere de serie de la 1 la 10 în celulele A1 până la A10.

Acum vreau să introduc doar 5 numere de serie și, de îndată ce valoarea variabilei „k” devine 6, vreau să ies din sub.

Va trebui să adaug testul logic în excel ca IF k = 6 Apoi Exit Sub .

Cod:

Sub Exit_Example1 () Dim k As Long For k = 1 to 10 If k = 6 Then Exit Sub 'Imediat ce valoarea k devine 6 va ignora toate codurile și va ieși din celule (k, 1). Valoare = k Next k End Sub

Acum rulați codul rând cu rând. Apăsați tasta F8 pentru a începe procedura.

Începând de acum, valoarea k este zero.

Pentru a schimba valoarea k la 1, apăsați încă o dată tasta F8.

Deci, valoarea k este 1, codul nostru continuă să ruleze și va insera 1 în celula A1. În acest fel, continuați să rulați bucla până când valoarea lui k devine 6.

Acum valoarea lui k este 6, iar linia de cod este pe cale să execute testul nostru logic pentru a ieși din subprocedură. Dacă mai apăs tasta F8 încă o dată, va trece direct la întreaga procedură secundară.

După cum putem vedea, a evidențiat cuvântul „Exit Sub”. La apăsarea tastei F8, va ieși din subprocedură fără a merge la cuvântul „Încheiere sub.”

Exemplul # 2 - La eroare Ieșiți din subprocedură

De asemenea, putem ieși din subprocedură atunci când obținem valorile erorii. De exemplu, luați în considerare datele de mai jos pentru a împărți numărul 1 de numărul 2.

Mai jos este codul pentru a obține împărțirea a două numere.

Cod:

Sub Exit_Example2 () Dim k As Long For k = 2 To 9 Cells (k, 3). Valoare = Cells (k, 1). Valoare / Cells (k, 2). Valoare Next k End Sub

După cum știm, nu putem împărți niciun număr la zero. Deci, dacă încercăm să facem acest lucru, vom primi eroarea ca Run Time Error '11': Division By Zero.

Pentru a evita acest lucru de îndată ce întâlnim vreo eroare, voi menționa macro-ul meu pentru a ieși din subprocedură cu efect imediat. Codul de mai jos este un astfel de caz.

Cod:

Sub Exit_Example2 () Dim k As Long For k = 2 to 9 On Error GoTo ErrorHandler Cells (k, 3). Valoare = Cells (k, 1). Valoare / Cells (k, 2). Valoare Next k ErrorHandler: Exit Sub Sfârșitul Sub

În exemplul de mai sus, am menționat declarația „On Error Goto ErrorHandler”. Aici cuvântul ErrorHandler este eticheta pe care am atribuit-o. Dacă puteți vedea în partea de jos a codului, am menționat marca ca

ErrorHandler: Exit Sub

De îndată ce codul întâlnește o eroare, acesta va împinge codul pentru a trece la etichetă, iar marca are declarația „Exit Sub”, astfel încât să părăsească subprocedura.

Acum voi rula codul; va calcula împărțirea până când va găsi o eroare.

După cum puteți vedea în celula C7, a întâmpinat o eroare ca „Divizare după zero”, deci a ieșit din subprocedură. Fără a informa utilizatorul care iese din subprocedură este întotdeauna un lucru periculos. Pentru a notifica utilizatorul despre eroare, putem include o mică casetă de mesaj.

Cod:

Sub Exit_Example2 () Dim k As Long For k = 2 to 9 On Error GoTo ErrorHandler Cells (k, 3) .Value = Cells (k, 1) .Value / Cells (k, 2) .Value Next k ErrorHandler: MsgBox " Eroarea a avut loc și eroarea este: "& vbNewLine & Err.Description Exit Sub End Sub

Codul de mai sus va afișa mesajul de eroare, apoi va ieși din subprocedură. În timpul rulării codului, dacă apare o eroare, acesta va afișa caseta de mesaj în VBA ca mai jos.

Acesta este mai mult un mod fiabil de a ieși din subprocedură.

Articole interesante...