Kļūdas gadījumā atsākt nākamo: Kļūdas apstrāde programmā Excel VBA

  • Dalīties Ar Šo
Hugh West

Microsoft Excel VBA programmā kļūdu apstrāde ir viens no svarīgākajiem uzdevumiem. Ja esat programmētājs, jūs zināt, cik svarīga ir kļūdu apstrāde, lai izveidotu perfektu lietojumprogrammu. Jebkura kļūda paziņojumā var daudzējādi traucēt jūsu VBA kodam. Tāpēc, izpildot VBA kodu, jums jābūt piesardzīgam, lai apstrādātu šīs kļūdas. Izmantojot VBA kodu programmā Excel, varat saskarties ar daudzām izpildes laika kļūdām.vienu no tiem, mēs izmantojam Kļūdas gadījumā atsākt Nākamais paziņojums.

Šajā pamācībā uzzināsiet, kā izmantot Kļūdas gadījumā atsākt Nākamais Šī pamācība būs precīza, ar piemērotiem piemēriem un atbilstošām ilustrācijām. Tāpēc palieciet kopā ar mums.

Lejupielādēt Practice Workbook

VBA kļūdas gadījumā atsākt Next.xlsm

Kļūdu apstrāde programmā Excel VBA

Strādājot ar Microsoft Excel VBA, saskarsieties ar daudzām kļūdām apakšprocedūrā. Ja VBA nevar izpildīt kādu paziņojumu, tas izmet izpildes laika kļūdu.

Excel automātiski apstrādā šīs kļūdas, tāpēc, kad rodas kļūda, tiek parādīts noklusējuma kļūdas ziņojums, piemēram, šāds:

Tagad tos var dažādi risināt, izmantojot dažus VBA izrakstus. Tos aplūkošu turpmākajās sadaļās.

Lasīt vairāk: Kā novērst kļūdu #REF! programmā Excel (6 risinājumi)

Par kļūdu paziņojumiem VBA

Lai apstrādātu izpildes laika kļūdas, mēs dodam norādījumus programmai Excel ar paziņojumu On Error. Tas izlemj, kādas darbības mēs vēlamies nekavējoties veikt tālāk. Būtībā mēs atspējošam šīs kļūdas, izmantojot šāda veida kļūdu apstrādi.

Mēs izmantojam trīs veidu paziņojumus On Error (sintakse) programmā Excel VBA.

  • Kļūdas gadījumā GoTo līnija
  • Kļūdas gadījumā atsākt Nākamais
  • Kļūdas gadījumā GoTo 0

Kad atrodat kļūdu, izmantojiet komandu On Error. Jo, ja neizmantojat Kļūdas gadījumā deklarācija, šīs izpildes laika kļūdas būs katastrofālas. Tā parādīs kļūdas paziņojumu un apturēs izpildi.

Kad mēs izmantojam Kļūdas gadījumā paziņojumā ieslēdzam "ieslēgtu" kļūdu apstrādātāju. "Aktīvs" kļūdu apstrādātājs ir ieslēgts apstrādātājs, kas sāk kļūdu apstrādes darbību. Ja kļūda rodas, kamēr ir iesaistīts kļūdu apstrādātājs, pašreizējās metodes kļūdu apstrādātājs nevar izturēt kļūdu. Pēc tam vadība atgriežas pie procedūras izsaucēja.

Ja izsaucošajam procesam ir ieslēgts kļūdu apstrādātājs, tas tiek iedarbināts, lai pārvaldītu kļūdu. Ja izsaucošās sistēmas kļūdu apstrādātājs ir attiecīgi ieslēgts, vadība tiek atdota atpakaļ, izmantojot iepriekšējās izsaukuma procedūras, līdz tiek atrasts ieslēgts, bet neaktīvs kļūdu apstrādātājs. Ja nevar atrast neaktīvu ieslēgtu kļūdu apstrādātāju, tas nozīmē, ka kļūda ir katastrofāla tās rašanās brīdī.

Katru reizi, kad kļūdas apstrādātājs nodod pilnvaras atpakaļ izsaucošajai procedūrai, šī procedūra attīsta esošo procedūru. Izpilde tiek atsākta pašreizējā procedūrā brīdī, kas izvēlēts ar komandu CV paziņojums, kad kļūdu apstrādātājs apstrādā kļūdas jebkurā procedūrā.

'Kļūdas gadījumā atsākt nākamo' programmā VBA

Tagad Kļūdas gadījumā atsākt Nākamais paziņojums liek VBA ignorēt visas kļūdainās koda rindas un nekavējoties pāriet uz nākamo koda rindu. Pēc tam Excel VBA kodi izlaidīs kļūdaino rindu vai rindas un pāries uz nākamo koda secību.

Portāls Kļūdas gadījumā atsākt Nākamais Šis paziņojums ļauj izlaist izpildi pat tad, ja ir izpildes laika kļūda. Šis paziņojums ļauj izlaist izpildi pat tad, ja ir izpildes laika kļūda. Ja jūs domājat, ka konkrēta koda rinda var radīt kļūdu, ievietojiet kļūdu apstrādes rutīnu tur, nevis citā procedūras vietā. Kļūdas gadījumā atsākt Nākamais paziņojums kļūst dīkstāves režīmā, kad jūsu kods izsauc citu procedūru. Tātad, kad jums ir nepieciešama saskaņota kļūdu apstrāde šajā procedūrā, jums ir jāpalaiž Kļūdas gadījumā atsākt Nākamais komandu katrā nosauktajā rakstzīmē.

Tas ir saprātīgi, ja koda rinda, kuru varat izlaist, nav nepieciešama makroreakcijas sekmīgai darbībai. Taču atcerieties, ka tā var būt kaitīga, ja to izmantojat nepareizi, jo tā var sniegt neparedzētus rezultātus.

Atcerieties:

Paziņojums On Error Resume Next nenovērš izpildes laika kļūdas. Tas būtībā ignorē kļūdas, ja jūsu VB izpilde tiks atsākta no paziņojuma, kas ir radījis izpildes laika kļūdu.

Aplūkojiet šādu kodu:

 Sub dalīt() MsgBox 5 / 0 MsgBox 5 / 2 End Sub 

Mēs mēģinājām dalīt 5 ar 0 un 1. Palaidīsim kodu. Tas parādīs šādu rezultātu:

Tas rada izpildes laika kļūdu. Mēs nevaram dalīt skaitli ar 0. Kad atkļūdosiet kodu, redzēsiet šādu kļūdu:

Kad VB programma konstatē kļūdu, tā nekavējoties pārtrauc procedūru. Tā neizpilda nākamo rindu.

Tagad īstenosim Kļūdas gadījumā atsākt Nākamais paziņojums pirms kļūdas paziņojuma:

 Sub dalīt() Par kļūdu Turpināt Nākamais MsgBox 5 / 0 MsgBox 5 / 2 End Sub 

Pēc koda palaišanas redzēsiet šādu informāciju:

Kā redzat, VBA ignorē kļūdu izraisījušo rindu un uzreiz pāriet pie nākamās koda rindas. Šādā veidā varat izmantot komandu Kļūdas gadījumā atsākt Nākamais paziņojums, lai apstrādātu kļūdu programmā Excel VBA.

'Kļūdas gadījumā atsākt nākamo' piemēri VBA programmā

Turpmākajās sadaļās es iepazīstināšu jūs ar diviem piemēriem par to. Kļūdas gadījumā atsākt Nākamais paziņojumu, ko varat ieviest savā Excel darblapā, izmantojot VBA. Es iesaku jums iemācīties un piemērot tos visus savā darbgrāmatā. Tas noteikti palielinās jūsu Excel zināšanas.

1. "Kļūdas gadījumā atsākt nākamo" paziņojums, lai paslēptu darblapas

Tagad šajā piemērā parādīšu VBA kodu, kas slēps visas aktīvās darbgrāmatas darblapas.

Aplūkojiet šādu ekrānšāviņu:

Šeit mums ir četras darblapas. Mēs tās visas paslēpsim, izmantojot šādu VBA kodu:

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

Izpildot šādu kodu, tiks parādīta šāda izpildes laika kļūda:

Excel rāda šo kļūdu, jo darbgrāmatā nevar paslēpt visas lapas. Tāpēc kļūda ir jāignorē. Lai to izdarītu, jūsu koda rindā jāievada paziņojums On Error Resume Next.

 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 

Pēc VBA koda izpildes pabeigšanas tiks parādīts šāds izvades rezultāts:

Galu galā pēc izpildes neredzēsiet nekādas kļūdas. Tātad mūsu On Error Resume Next paziņojums VBA kodā darbojās patiešām labi.

Lasīt vairāk: Kļūdas programmā Excel un to nozīme (15 dažādas kļūdas)

2. VLOOKUP funkcija ar 'On Error Resume Next' programmā VBA

Šajā piemērā es parādīšu piemēru par VLOOKUP funkcija VBA . Tagad šajā VBA kodā ir iekļauts arī Kļūdas gadījumā atsākt Nākamais paziņojums.

Aplūkojiet šādu ekrānšāviņu:

Šeit redzami dažu cilvēku vārdi un viņu vecums. Blakus esošajā tabulā mēs izmantosim VLOOKUP lai uzzinātu personas vārdu un vecumu.

Lai to izdarītu, ievadiet šādu kodu:

 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 

Tagad palaidiet makro. Parādīsies šāda kļūda:

Šī ir izpildes laika kļūda. Kāpēc tā notiek? Vēlreiz apskatiet datu kopu:

Kā redzat, nav datu par "Aaron" un "Emma". Tāpēc tiek izpildīts tikai VLOOKUP Pēc tam tā izpilde tiek pārtraukta. Ja vēlaties ignorēt kļūdu un turpināt meklēt pārējos vecumus, izmantojiet funkciju Kļūdas gadījumā atsākt Nākamais paziņojums.

 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 

Pēc VBA koda palaišanas redzēsiet šādu izvades rezultātu:

Kā redzat, piemērojot Kļūdas gadījumā atsākt Nākamais komandu, mēs ignorējām kļūdu un atradām pārējo personu vecumu. Mūsu VBA kods neatrada Ārona un Emmas datus. Tāpēc tas ignorēja šīs vērtības un atdeva pārējās vērtības Excel darblapā.

Vairāk lasiet šeit: [Labots] Excel konstatēja problēmu ar vienu vai vairākām formulas atsaucēm šajā darblapā

Izslēgt "Kļūdas gadījumā atsākt nākamo" ar Excel VBA

Tagad var rasties situācija, kad vēlaties ignorēt kļūdas kādā konkrētā VBA koda segmentā. Atcerieties, ka, ja VBA kodā izmantojat paziņojumu On Error Resume Next, tiks izlaistas visas kļūdas pēc tam. Ja vēlaties to izslēgt un ieslēgt kļūdu apstrādi citā segmentā, izmantojiet Kļūdas gadījumā GoTo 0 . Tas atkal iespējos kļūdu apstrādi.

Vispārīga lietošana:

Apakšiedaļa error_handling()

Kļūdu ignorēšana

Kļūdas gadījumā atsākt Nākamais

// kodu rindas

Kļūdu apstrādes ieslēgšana

Kļūdas gadījumā GoTo 0

// kodu rindas

Apakšnodaļas beigas

Aplūkojiet šādu VBA kodu:

 Sub error_handling() Dim i As Long 'ignorēt kļūdu 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 'izslēgt kļūdas gadījumā atsākt nākamo On Error GoTo 0 MsgBox i / 0 End Sub 

Mēs izmantojām iepriekš izmantoto kodu VLOOKUP Šeit pievienots papildu koda gabals, lai demonstrētu jums. Mūsu kods ignorēs kļūdas, veicot funkciju. VLOOKUP bet tas aktivizēs kļūdu apstrādi pēc tam, kad Kļūdas gadījumā GoTo 0 paziņojums.

Lasīt vairāk: Excel VBA: izslēdziet "Kļūdas gadījumā atsākt nākamo"

VBA 'On Error GoTo'

Iepriekš es apspriedu kļūdu apstrādi, izmantojot On Error metodi. Viss mūsu raksts bija par to. Kļūdas gadījumā atsākt Nākamais. Tagad ir arī divu veidu kļūdu apstrāde, par ko tiks runāts turpmākajās sadaļās.

1. VBA kļūdas gadījumā pāriet uz 0

Portāls Kļūdas gadījumā Goto 0 paziņojums ir Excel iebūvēts iestatījums, ja jūsu kodos nav kļūdu apstrādātāja. Tas būtībā nozīmē, ka tad, kad VBA atrod kļūdu ar Kļūdas gadījumā GoTo 0 , tā apturēs koda izpildi un parādīs tradicionālo kļūdas paziņojuma logu.

Kļūdas gadījumā GoTo 0 Šis paziņojums būtībā izslēdz kļūdu apstrādi šajā procedūrā. Tas nenosaka 0. rindu kā kļūdu apstrādes koda sākumu, pat ja metode ietver 0. rindu.

Aplūkojiet šādu kodu:

 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 

Mēs jau esam jums parādījuši šo kodu. Šis kods būtībā paslēpj visas darblapas jūsu pašreizējā darbgrāmatā. Tagad man patiešām ir papildu koda daļa ar Kļūdas gadījumā GoTo 0 lai parādītu kļūdu. Ja palaidīsiet kodu, redzēsiet šādu informāciju:

Tā parāda šo kļūdu, jo aktīvajā darbgrāmatā nevar būt lapas ar tādu pašu nosaukumu.

2. VBA On Error GoTo līnija

Tagad varat arī uzdot programmai Excel palaist citu koda segmentu, ja tā atrod kādu kļūdu, izmantojot komandu Par kļūdu GoTo līnija . Tas liek programmai Excel kaut ko izpildīt pēc kļūdas konstatēšanas.

Līnijas arguments ir jebkura rindas birka vai rindas numurs. Ja mūsu kods izraisa kādu izpildes laika kļūdu, tas pāries uz rindu, izraisot kļūdu apstrādātāju, kas ir aktīvs izpildē. Atcerieties, ka jūsu definētajai rindai ir jāatrodas tieši tajā pašā procedūrā, kurā atrodas paziņojums On Error; pretējā gadījumā tas izraisīs kompilēšanas kļūdu.

Aplūkojiet šādu kodu:

 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 "Ir arī lapa ar tādu pašu nosaukumu. Izmēģiniet citu." End Sub 

Jūs redzējāt kodu iepriekšējā piemērā. Kad mēs izmantojām Kļūdas gadījumā GoTo 0 , tas izraisīja kļūdu. Bet šeit mēs to aizstājām ar Par kļūdu GoTo līnija paziņojums.

Tagad palaidiet kodu, un redzēsiet šādu informāciju:

Kā redzat, netiek parādīts standarta kļūdas dialoglodziņš. Tā vietā tiek parādīts pielāgotais ziņojuma logs, ko mēs izveidojām sadaļā error_handler segmentā. Kad Excel atrod kādu kļūdu, tas pāriet uz error_handler segmentu un parāda ziņojuma logu.

Mēs izmantojām arī Iziet no apakšnodaļas procedūrā. Ja nav lapas ar nosaukumu " VLOOKUP ", mūsu VBA kods pārdēvēs aktīvo lapu. Pēc tam mums ir jāpabeidz izpilde šeit, jo mums nav nepieciešams turpināt kļūdu apstrādātāja darbību un parādīt ziņojumu logu.

VBA "Kļūdas gadījumā" nedarbojas programmā Excel

Dažreiz, lai arī cik ļoti censtos, metode On Error nedarbojas. Agrāk mēs ieviesām metodi Kļūdas gadījumā metode, lai apstrādātu kļūdas. Bet dažreiz tā uzrāda kļūdas, pat ja jūs izmantojat Kļūdas gadījumā atsākt Nākamais vai Kļūdas gadījumā GoTo 0 . Jūsu kodā varētu būt vairāki iemesli, kas jums jānovērš. Es jums to neparādīšu.

Galvenais VBA Kļūdas gadījumā Nestrādā programmā Excel ir ieslēgta opcija "Pārtraukt visas kļūdas" programmā Excel.

Lai to atrisinātu, izpildiet šos soļus:

📌 Soļi

  • Vispirms nospiediet Alt+F11 tastatūrā, lai atvērtu VBA redaktoru.
  • Tagad noklikšķiniet uz Rīki> opcijas.

  • Pēc tam noklikšķiniet uz Vispārīgi cilnē Iespējas dialoglodziņš.

  • Šeit jūs varat redzēt, " Pārtraukums pie visām kļūdām " jau ir atzīmēts. Tas būtībā neļauj apstrādāt kļūdas.
  • Lai to mainītu, atlasiet opciju " Pārtraukums pie neapstrādātām kļūdām " un noklikšķiniet uz LABI .

Es ceru, ka tas novērsīs jūsu VBA problēmu "Kļūdas gadījumā", kas nedarbojas programmā Excel.

Lasīt vairāk: Kļūdas nosaukuma kļūdas iemesli un labojumi programmā Excel (10 piemēri)

💬 Lietas, kas jāatceras

✎ Kļūdas gadījumā atsākt nākamo kļūdu nenovērš. Tā būtībā ignorē kļūdu un pāriet pie nākamā paziņojuma.

Excel izķer un saglabā izpildes laika kļūdas Err objektā. Kad mēs izmantojam Kļūdas gadījumā atsākt Nākamais paziņojums dzēš Err objekta īpašības.

Varat izslēgt Kļūdas gadījumā atsākt Nākamais paziņojumu savā VBA kodā programmā Excel, pievienojot Kļūdas gadījumā GoTo 0 paziņojums.

Secinājums

Nobeigumā es ceru, ka šī pamācība ir sniegusi jums noderīgas zināšanas, lai izmantotu Kļūdas gadījumā atsākt Nākamais programmā Excel VBA. Iesaku jums apgūt un piemērot visus šos norādījumus savai datu kopai. Lejupielādējiet praktisko darbgrāmatu un izmēģiniet tos paši. Tāpat neaizmirstiet sniegt atsauksmes komentāru sadaļā. Jūsu vērtīgās atsauksmes uztur mūsu motivāciju veidot šādas pamācības.

Neaizmirstiet pārbaudīt mūsu vietni Exceldemy.com par dažādām ar Excel saistītām problēmām un risinājumiem.

Turpiniet apgūt jaunas metodes un augt!

Hjū Vests ir ļoti pieredzējis Excel treneris un analītiķis ar vairāk nekā 10 gadu pieredzi šajā nozarē. Viņam ir bakalaura grāds grāmatvedībā un finansēs un maģistra grāds uzņēmējdarbības vadībā. Hjū aizraujas ar mācīšanu, un viņš ir izstrādājis unikālu mācīšanas pieeju, kas ir viegli izpildāma un saprotama. Viņa ekspertu zināšanas programmā Excel ir palīdzējušas tūkstošiem studentu un profesionāļu visā pasaulē uzlabot savas prasmes un izcelties karjerā. Izmantojot savu emuāru, Hjū dalās savās zināšanās ar pasauli, piedāvājot bezmaksas Excel apmācības un tiešsaistes apmācību, lai palīdzētu personām un uzņēmumiem pilnībā izmantot savu potenciālu.