La eroare, reluați Următoarea: Gestionarea erorilor în Excel VBA

  • Imparte Asta
Hugh West

În Microsoft Excel VBA, gestionarea erorilor este una dintre sarcinile critice. Dacă sunteți un programator, cunoașteți importanța gestionării erorilor pentru a construi o aplicație perfectă. Orice greșeală într-o declarație poate împiedica codul VBA în multe feluri. Deci, trebuie să fiți precaut pentru a gestiona aceste erori în timpul executării unui cod VBA. Există o mulțime de erori de execuție cu care vă puteți confrunta în timpul utilizării codului VBA în Excel. Pentru a rezolvaunul dintre ele, folosim La eroare, reluați Următorul declarație.

În acest tutorial, veți învăța să utilizați La eroare, reluați Următorul în Excel VBA. Acest tutorial va fi la obiect, cu exemple adecvate și ilustrații corespunzătoare. Așadar, rămâneți cu noi.

Descărcați caietul de practică

VBA La eroare, reluarea următoare.xlsm

Gestionarea erorilor în Excel VBA

În timp ce lucrați cu Microsoft Excel VBA, vă veți confrunta cu o mulțime de erori în subprocedura dvs. Atunci când VBA nu poate executa o instrucțiune, acesta aruncă o eroare de execuție.

Excel se ocupă automat de aceste erori, astfel încât, atunci când apare o eroare de execuție, afișează un mesaj de eroare implicit, cum ar fi următorul:

Acum, puteți să vă ocupați de acestea în diferite moduri cu ajutorul unor instrucțiuni VBA. Le voi discuta în secțiunile ulterioare.

Citește mai mult: Cum să remediați eroarea #REF! în Excel (6 soluții)

Cu privire la declarațiile de eroare în VBA

Pentru a gestiona erorile de execuție, instruim Excel cu instrucțiunea On Error. Aceasta decide ce fel de operații dorim să facem imediat în continuare. Practic, dezactivăm aceste erori prin aceste tipuri de gestionare a erorilor.

Utilizăm trei tipuri de instrucțiuni On Error (sintaxă) în Excel VBA.

  • La eroare GoTo linia
  • La eroare, reluați Următorul
  • La eroare GoTo 0

Atunci când găsiți o eroare, utilizați comanda On Error. Deoarece dacă nu utilizați o comandă La eroare Aceste erori de execuție vor fi dezastruoase. Se va afișa un mesaj de eroare și se va opri execuția.

Atunci când folosim un La eroare activăm un gestionar de erori "activat". Gestionarul de erori "activ" este un gestionar activat care începe operațiunea de tratare a erorilor. Dacă apare o greșeală în timp ce este implicat un gestionar de erori, gestionarul de erori al metodei curente nu poate suporta eroarea. După aceea, controlul revine la procedura de apelare.

În cazul în care procesul apelant are un gestionar de erori activat, acesta este declanșat pentru a gestiona eroarea. Dacă gestionarul de erori al sistemului apelant este activat în mod corespunzător, controlul se returnează prin intermediul procedurilor de apelare anterioare până când găsește un gestionar de erori activat, dar inactiv. Dacă nu poate găsi niciun gestionar de erori activat inactiv, înseamnă că eroarea este catastrofală în punctul în care s-a produs.

De fiecare dată când gestionarul de erori redă autoritatea unei proceduri de apelare, procedura respectivă evoluează procedura existentă. Execuția se reia în procedura actuală la momentul selectat de către Curriculum vitae atunci când un gestionar de erori gestionează erori în orice procedură.

'La eroare, reluarea următoare' în VBA

Acum, în La eroare, reluați Următorul îi spune VBA să ignore orice linie de cod care conține erori și să treacă imediat la următoarea linie de cod. După aceea, codurile Excel VBA vor sări peste linia sau liniile care conțin erori și vor trece la următoarea secvență de cod.

The La eroare, reluați Următorul forțează execuția să se reia cu comanda care urmărește instantaneu linia de coduri care a indus eroarea de execuție. Această instrucțiune permite ca o execuție să sară chiar dacă există o eroare de execuție. Dacă credeți că o anumită linie de cod poate produce o eroare, plasați rutina de tratare a erorilor acolo, în loc să o plasați într-o altă locație în cadrul procedurii. Instrucțiunea La eroare, reluați Următorul devine inactiv atunci când codul dvs. apelează o altă procedură. Astfel, atunci când aveți nevoie de o tratare a erorilor adaptată în acea rutină, trebuie să executați o instrucțiune La eroare, reluați Următorul în fiecare model numit.

Este rezonabil atunci când linia de cod pe care o puteți sări nu este necesară pentru buna funcționare a macroului. Dar nu uitați că poate fi dăunătoare dacă o utilizați incorect, deoarece poate oferi rezultate neintenționate.

Nu uitați:

Instrucțiunea On Error Resume Next nu rezolvă erorile de execuție. Practic, ignoră erorile în cazul în care execuția VB va fi reluată de la instrucțiunea care a generat eroarea de execuție.

Aruncați o privire la următorul cod:

 Sub divide() MsgBox 5 / 0 MsgBox 5 / 2 End Sub 

Am încercat să împărțim 5 cu 0 și 1. Să rulăm codul. Acesta va afișa următorul rezultat:

Se produce o eroare de execuție. Nu putem împărți un număr la 0. Când depanați codul, veți vedea următoarele:

Atunci când programul VB găsește o eroare, oprește imediat procedura. Nu execută următoarea linie.

Acum, haideți să implementăm La eroare, reluați Următorul înainte de declarația de eroare:

 Sub divide() On Error Resume Next MsgBox 5 / 0 MsgBox 5 / 2 End Sub 

După rularea codului, veți vedea următoarele:

După cum puteți vedea, VBA ignoră linia care produce eroarea și trece imediat la următoarea linie de cod. În acest fel, puteți utiliza La eroare, reluați Următorul pentru a gestiona eroarea în Excel VBA.

Exemple de "La eroare, reluarea următoare" în VBA

În secțiunile următoare, vă voi oferi două exemple de La eroare, reluați Următorul declarație pe care o puteți implementa în foaia de lucru Excel folosind VBA. Vă recomand să învățați și să aplicați toate acestea în registrul de lucru. Cu siguranță vă va spori cunoștințele despre Excel.

1. Instrucțiunea 'On Error Resume Next' pentru a ascunde foile de lucru

Acum, în acest exemplu, vă voi arăta un cod VBA care va ascunde toate foile de lucru din registrul de lucru activ.

Aruncați o privire la următoarea captură de ecran:

Aici avem patru foi de lucru. Le vom ascunde pe toate folosind următorul cod VBA:

 Sub hide_all_sheets() Dim copies As Worksheet For Each copies In ActiveWorkbook.Sheets copies.Visible = False Next copies End Sub 

Atunci când executați următorul cod, veți vedea următoarea eroare de execuție:

Excel afișează această eroare deoarece nu puteți ascunde toate foile dintr-un registru de lucru. Prin urmare, trebuie să ignorați eroarea. Pentru a face acest lucru, trebuie să implementați instrucțiunea On Error Resume Next în linia de cod.

 Sub hide_all_sheets() Dim copies As Worksheet On Error Resume Next For Each copies In ActiveWorkbook.Sheets copies.Visible = False Next copies End Sub 

După finalizarea execuției codului VBA, veți vedea următoarea ieșire:

În cele din urmă, nu veți vedea nicio eroare după execuție. Așadar, instrucțiunea noastră On Error Resume Next a funcționat foarte bine în codul VBA.

Citește mai mult: Erori în Excel și semnificația lor (15 erori diferite)

2. Funcția VLOOKUP cu "On Error Resume Next" în VBA

În acest exemplu, voi arăta un exemplu de funcția VLOOKUP în VBA Acum, acest cod VBA include, de asemenea, și La eroare, reluați Următorul declarație.

Aruncați o privire la următoarea captură de ecran:

Aici puteți vedea numele și vârsta unor persoane. În tabelul alăturat, vom folosi VLOOKUP pentru a afla numele și vârsta persoanei.

Introduceți următorul cod pentru a face acest lucru:

 Sub VLOOKUP_Function() Dim i As Long For i = 5 To 9 Cells(i, 6).Value = WorksheetFunction.VLookup(Cells(i, 5), Range("B:C"), 2, 0) Next i End Sub 

Acum, rulați macroul și veți vedea următoarea eroare:

Aceasta este o eroare de execuție. De ce se întâmplă acest lucru? Aruncați din nou o privire la setul de date:

După cum se poate observa, nu există date pentru "Aaron" și "Emma". De aceea, se execută doar funcția VLOOKUP pentru prima intrare. După aceea, se oprește execuția. Acum, dacă doriți să ignorați eroarea și să continuați să găsiți restul vârstelor, utilizați opțiunea La eroare, reluați Următorul declarație.

 Sub VLOOKUP_Function() Dim i As Long On Error Resume Next For i = 5 To 9 Cells(i, 6).Value = WorksheetFunction.VLookup(Cells(i, 5), Range("B:C"), 2, 0) Next i End Sub 

După rularea codului VBA, veți vedea următorul rezultat:

După cum puteți vedea, prin aplicarea La eroare, reluați Următorul am ignorat eroarea și am găsit restul vârstelor persoanelor. Codul nostru VBA nu a găsit date despre Aaron și Emma, motiv pentru care a ignorat aceste valori și a returnat restul valorilor din foaia de calcul Excel.

Citiți mai mult: [Fixed] Excel a găsit o problemă cu una sau mai multe referințe de formule în această foaie de lucru

Dezactivați "La eroare, reluați următoarea" cu Excel VBA

Acum, s-ar putea să vă aflați într-o situație în care doriți să ignorați erorile pentru un anumit segment al codului VBA. Rețineți că, dacă utilizați instrucțiunea On Error Resume Next într-un cod VBA, acesta va sări peste toate erorile de după. Acum, dacă doriți să dezactivați acest lucru și să activați gestionarea erorilor pentru un alt segment, utilizați La eroare GoTo 0 Aceasta va activa din nou gestionarea erorilor.

Utilizare generică:

Sub error_handling()

Pentru a ignora erorile

La eroare, reluați Următorul

// linii de coduri

Pentru a activa gestionarea erorilor

La eroare GoTo 0

//linii de coduri

Sfârșitul sub

Aruncați o privire la următorul cod VBA:

 Sub error_handling() Dim i As Long 'pentru a ignora eroarea La eroare Reluați Următorul For i = 5 To 9 Cells(i, 6).Value = WorksheetFunction.VLookup(Cells(i, 5), Range("B:C"), 2, 0) Următorul i 'pentru a dezactiva la eroare reluați următorul La eroare Mergeți la 0 MsgBox i / 0 End Sub 

Am folosit codul folosit anterior pentru VLOOKUP Aici am adăugat o bucată de cod suplimentar pentru a vă demonstra. Codul nostru va ignora erorile în timp ce execută funcția VLOOKUP dar va activa gestionarea erorilor după ce se va activa La eroare GoTo 0 declarație.

Citește mai mult: Excel VBA: Dezactivați funcția "La eroare, reluați următoarea"

VBA "La eroare GoTo

Anterior am discutat despre tratarea erorilor folosind metoda On Error. Întregul nostru articol a fost despre În caz de eroare, reluați următoarea. Există, de asemenea, două tipuri de tratare a erorilor pe care le voi discuta în secțiunile următoare.

1. VBA On Error GoTo 0

The La eroare Goto 0 este o setare încorporată de Excel în cazul în care codurile dvs. nu au un gestionar de erori în ele. Practic, aceasta implică faptul că atunci când VBA găsește o eroare cu La eroare GoTo 0 , se va opri rularea codului și se va afișa caseta tradițională cu mesajul de eroare.

La eroare GoTo 0 practic dezactivează gestionarea erorilor în procedura actuală. Aceasta nu definește linia 0 ca fiind începutul codului de gestionare a erorilor, chiar dacă metoda include o linie numerotată cu 0.

Aruncați o privire la următorul cod:

 Sub on_error_goto_0() Dim copies As Worksheet On Error Resume Next For Each copies In ActiveWorkbook.Sheets copies.Visible = False Next copies On Error GoTo 0 ActiveSheet.Name = "Copy-4" End Sub 

V-am arătat deja acest cod. Practic, acest cod ascunde toate foile de lucru din registrul de lucru curent. Acum, am într-adevăr o bucată suplimentară de cod cu La eroare GoTo 0 Dacă executați codul, veți vedea următoarele:

Se afișează această eroare deoarece nu putem avea foi cu același nume în registrul de lucru activ.

2. VBA On Error GoTo line

Acum, puteți, de asemenea, să instruiți Excel să ruleze un alt segment de cod dacă găsește vreo eroare, folosind opțiunea La eroare GoTo line Acesta îi spune lui Excel să execute ceva după ce găsește o eroare.

Argumentul linie este orice etichetă de linie sau număr de linie. Dacă codul nostru cauzează o eroare de execuție, se va muta la linia respectivă, determinând activarea gestionarului de erori în timpul execuției. Rețineți, linia definită trebuie să fie exact în aceeași procedură ca și instrucțiunea On Error; în caz contrar, va cauza o eroare de compilare.

Aruncați o privire la următorul cod:

 Sub on_error_goto_line() Dim copies As Worksheet On Error Resume Next For Each copies In ActiveWorkbook.Sheets copies.Visible = False Next copies On Error GoTo error_handler ActiveSheet.Name = "Copy-4" Exit Sub error_handler: MsgBox "Există și o foaie cu același nume. Încercați una diferită." End Sub 

Ați văzut codul în exemplul anterior. Când am folosit La eroare GoTo 0 Dar, aici am înlocuit-o cu La eroare GoTo line declarație.

Acum, rulați codul și veți vedea următoarele:

După cum puteți vedea, nu ne arată caseta de dialog standard de eroare, ci caseta de mesaj personalizată pe care am creat-o în fișierul error_handler Când Excel găsește o eroare, sare la segmentul error_handler și ne arată caseta de mesaje.

Am folosit, de asemenea, un Ieșire Sub în procedură. Dacă nu există o foaie numită " VLOOKUP ", codul nostru VBA va redenumi foaia activă. Apoi, trebuie să încheiem execuția aici, deoarece nu trebuie să continuăm cu gestionarul de erori și să afișăm caseta de mesaje.

VBA "La eroare" nu funcționează în Excel

Uneori, oricât de mult ați încerca, metoda On Error nu va funcționa. Anterior, am implementat metoda La eroare pentru a gestiona erorile. Dar, uneori, se vor afișa erori chiar dacă folosiți metoda La eroare, reluați Următorul sau La eroare GoTo 0 S-ar putea să existe mai multe motive în codul dvs. pe care trebuie să le rezolvați. Nu am de gând să vă arăt asta.

Motivul de bază pentru VBA ' La eroare Not Working in Excel este activarea opțiunii "Break on All Errors" în Excel.

Urmați acești pași pentru a rezolva această problemă:

📌 Pași

  • În primul rând, apăsați Alt+F11 de pe tastatură pentru a deschide editorul VBA.
  • Acum, faceți clic pe Instrumente> Opțiuni.

  • După aceea, faceți clic pe butonul General în fila Opțiuni caseta de dialog.

  • Aici, puteți vedea, " Pauză la toate erorile " este deja verificată. Practic, aceasta vă împiedică să gestionați erorile.
  • Pentru a o modifica, selectați opțiunea " Întrerupeți la erorile nesoluționate " și faceți clic pe OK .

Sper că vă va rezolva problema de VBA "Pe eroare" nu funcționează în Excel.

Citește mai mult: Motive și corecții ale erorii NAME în Excel (10 exemple)

💬 Lucruri de reținut

✎ La eroare, reluarea următoare nu repară erorile. Practic, ignoră eroarea și trece la următoarea declarație.

Excel captează și stochează erorile de execuție în obiectul Err. Atunci când folosim La eroare, reluați Următorul șterge proprietățile obiectului Err.

Puteți dezactiva La eroare, reluați Următorul în codul VBA din Excel prin adăugarea instrucțiunii La eroare GoTo 0 declarație.

Concluzie

În concluzie, sper că acest tutorial v-a oferit cunoștințe utile pentru a utiliza La eroare, reluați Următorul în Excel VBA. Vă recomand să învățați și să aplicați toate aceste instrucțiuni la setul dvs. de date. Descărcați caietul de lucru de practică și încercați-le dvs. De asemenea, nu ezitați să oferiți feedback în secțiunea de comentarii. Feedback-ul dvs. valoros ne menține motivați să creăm tutoriale ca acesta.

Nu uitați să verificați site-ul nostru Exceldemy.com pentru diverse probleme și soluții legate de Excel.

Continuați să învățați noi metode și continuați să creșteți!

Hugh West este un trainer și analist Excel cu o experiență de peste 10 ani în industrie. Deține o diplomă de licență în contabilitate și finanțe și un master în administrarea afacerilor. Hugh are o pasiune pentru predare și a dezvoltat o abordare unică de predare care este ușor de urmărit și de înțeles. Cunoștințele sale experte despre Excel au ajutat mii de studenți și profesioniști din întreaga lume să-și îmbunătățească abilitățile și să exceleze în cariera lor. Prin blogul său, Hugh își împărtășește cunoștințele lumii, oferind tutoriale gratuite Excel și instruire online pentru a ajuta persoanele și companiile să-și atingă întregul potențial.