Sisällysluettelo
Microsoft Excel VBA:ssa virheiden käsittely on yksi kriittisistä tehtävistä. Jos olet koodaaja, tiedät virheiden käsittelyn merkityksen täydellisen sovelluksen rakentamisessa. Mikä tahansa virhe lausekkeessa voi haitata VBA-koodia monin tavoin. Sinun on siis oltava varovainen käsittelemään näitä virheitä VBA-koodia suoritettaessa. VBA-koodia Excelissä käytettäessä voi tulla vastaan monia suoritusaikaisia virheitä. Ratkaistaksesiyksi niistä, käytämme On Error Resume Next lausunto.
Tässä opetusohjelmassa opit käyttämään komentoa On Error Resume Next lausekkeen Excel VBA:ssa. Tämä opetusohjelma on täsmällinen sopivien esimerkkien ja asianmukaisten kuvien avulla. Pysy siis kanssamme.
Lataa harjoituskirja
VBA Virheessä jatkaa Next.xlsm
Virheiden käsittely Excel VBA:ssa
Kun työskentelet Microsoft Excel VBA:n kanssa, kohtaat paljon virheitä aliprosessissasi. Kun VBA ei pysty suorittamaan lauseketta, se heittää suoritusvirheen.
Excel käsittelee nämä virheet automaattisesti, joten kun suoritusaikainen virhe ilmenee, se näyttää seuraavan kaltaisen oletusvirheilmoituksen:
Voit käsitellä näitä eri tavoin joillakin VBA-lausekkeilla, joita käsittelen myöhemmissä osioissa.
Lue lisää: Kuinka korjata #REF! -virhe Excelissä (6 ratkaisua)
VBA:n virhelausekkeet
Käsitellessämme suoritusaikaisia virheitä ohjeistamme Exceliä On Error -lausekkeella. Se päättää, millaisia toimintoja haluamme tehdä seuraavaksi välittömästi. Periaatteessa poistamme nämä virheet käytöstä tämäntyyppisellä virheenkäsittelyllä.
Käytämme Excel VBA:ssa kolmenlaisia On Error -lauseita (syntaksi).
- On Error GoTo linja
- On Error Resume Next
- On Error GoTo 0
Kun havaitset virheen, käytä On Error -komentoa. Koska jos et käytä On Error ilmoituksessa, nämä ajonaikaiset virheet ovat katastrofaalisia. Se näyttää virheilmoituksen ja keskeyttää suorituksen.
Kun käytämme On Error lausekkeella kytketään päälle "aktiivinen" virheenkäsittelijä. "Aktiivinen" virheenkäsittelijä on käytössä oleva virheenkäsittelijä, joka aloittaa virheenkäsittelyn. Jos virhe syntyy virheenkäsittelijän ollessa mukana, nykyisen metodin virheenkäsittelijä ei kestä virhettä. Sen jälkeen hallinta palaa kutsuvalle proseduurille.
Jos kutsuvalla prosessilla on käytössä oleva virheenkäsittelijä, se käynnistyy virheen hallitsemiseksi. Jos kutsuvan järjestelmän virheenkäsittelijä on vastaavasti käytössä, hallinta palautuu aiempien kutsuvien proseduurien kautta, kunnes se löytää käytössä olevan, mutta ei-aktiivisen virheenkäsittelijän. Jos se ei löydä yhtään käyttämätöntä, käytössä olevaa virheenkäsittelijää, tämä tarkoittaa, että vika on katastrofaalinen sen tapahtumahetkellä.
Joka kerta, kun virheenkäsittelijä antaa valtuudet takaisin kutsuvalle proseduurille, kyseinen proseduuri kehittää nykyistä proseduuria. Suoritus alkaa uudelleen nykyisessä proseduurissa hetkellä, jonka valitsee komento Yhteenveto lauseke, kun virheenkäsittelijä käsittelee virheitä missä tahansa menettelyssä.
'Virheen sattuessa jatka seuraavaksi' VBA:ssa
Nyt On Error Resume Next lauseke käskee VBA:ta jättämään huomiotta kaikki koodirivit, joissa on virheitä, ja siirtymään heti seuraavalle koodiriville. Tämän jälkeen Excelin VBA-koodit ohittavat rivin tai rivit, joissa on virheitä, ja siirtyvät seuraavaan koodisekvenssiin.
The On Error Resume Next lauseke pakottaa suorituksen jatkamaan komennolla välittömästi ajovirheen aiheuttaneen koodirivin jälkeen. Tämä lauseke sallii suorituksen hyppäämisen, vaikka ajovirhe esiintyisikin. Jos uskot, että tietty koodirivi voi aiheuttaa virheen, sijoita virheenkäsittelyrutiini sinne sen sijaan, että sijoittaisit sen johonkin muuhun paikkaan proseduurin sisällä. On Error Resume Next lausekkeesta tulee käyttämätön, kun koodisi kutsuu toista proseduuria. Kun tarvitset sovitettua virheenkäsittelyä kyseisessä rutiinissa, sinun on suoritettava komento On Error Resume Next komennon jokaisessa nimetyssä kuviossa.
Se on järkevää silloin, kun ohitettava koodirivi ei ole välttämätön makron toimivuuden kannalta. Muista kuitenkin, että jos käytät sitä väärin, siitä voi olla haittaa, koska se voi tuottaa tahattomia tuloksia.
Muista:
On Error Resume Next -lause ei korjaa suoritusaikavirheitä. Se periaatteessa jättää huomiotta virheet, joissa VB:n suoritus jatkuu suoritusaikavirheen tuottaneesta lausekkeesta.
Katso seuraavaa koodia:
Sub divide() MsgBox 5 / 0 MsgBox 5 / 2 End Sub
Yritimme jakaa 5:n luvuilla 0 ja 1. Suoritetaan koodi. Se näyttää seuraavan tuloksen:
Se tuottaa ajonaikaisen virheen. Emme voi jakaa lukua luvulla 0. Kun debuggaat koodia, näet seuraavaa:
Kun VB-ohjelma havaitsee virheen, se pysäyttää toimenpiteen välittömästi. Se ei suorita seuraavaa riviä.
Toteutetaan nyt On Error Resume Next lauseke ennen virhelauseketta:
Sub divide() On Error Resume Next MsgBox 5 / 0 MsgBox 5 / 2 End Sub
Kun olet ajanut koodin, näet seuraavan:
Kuten näet, VBA jättää virheen tuottavan rivin huomiotta ja siirtyy heti seuraavalle koodiriville. Näin voit käyttää komentoa On Error Resume Next lausekkeen Excel VBA:n virheen käsittelemiseksi.
Esimerkkejä 'On Error Resume Next' -ohjelmasta VBA:ssa
Seuraavissa jaksoissa annan sinulle kaksi esimerkkiä siitä, miten On Error Resume Next lauseke, jonka voit toteuttaa Excel-taulukkoon VBA:n avulla. Suosittelen, että opit ja sovellat kaikkia näitä työkirjaasi. Se lisää varmasti Excel-tietämystäsi.
1. "Virheen sattuessa jatka seuraavaan" -lausunto työarkkien piilottamiseksi.
Tässä esimerkissä näytän sinulle VBA-koodin, joka piilottaa kaikki aktiivisen työkirjan työarkit.
Katso seuraavaa kuvakaappausta:
Meillä on neljä työarkkia, jotka piilotamme kaikki seuraavan VBA-koodin avulla:
Sub hide_all_sheets() Dim copies As Worksheet For Each copies In ActiveWorkbook.Sheets copies.Visible = False Next copies End Sub
Kun suoritat seuraavan koodin, näet seuraavan ajonaikaisen virheen:
Excel näyttää tämän virheen, koska työkirjan kaikkia arkkia ei voi piilottaa. Sinun on siis jätettävä virhe huomiotta. Tätä varten sinun on otettava koodirivilläsi käyttöön On Error Resume Next -lause.
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
Kun olet suorittanut VBA-koodin, näet seuraavan tulosteen:
Loppujen lopuksi et näe mitään virheitä suorituksen jälkeen. On Error Resume Next -lauseemme toimi siis todella hyvin VBA-koodissa.
Lue lisää: Excelin virheet ja niiden merkitys (15 erilaista virhettä)
2. VLOOKUP-funktio, jossa on 'On Error Resume Next' VBA:ssa.
Tässä esimerkissä näytän esimerkin VLOOKUP-toiminto VBA:ssa . Tämä VBA-koodi sisältää myös On Error Resume Next lausunto.
Katso seuraavaa kuvakaappausta:
Tässä näet joidenkin ihmisten nimet ja iät. Viereisessä taulukossa käytämme komentoa VLOOKUP löytääksesi henkilön nimen ja iän.
Kirjoita seuraava koodi tätä varten:
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
Suorita nyt makro. Näet seuraavan virheilmoituksen:
Kyseessä on ajoaikainen virhe. Miksi näin tapahtuu? Katsokaa tietokokonaisuutta uudelleen:
Kuten näet, tietoja "Aaron" ja "Emma" ei ole. Siksi se suorittaa vain komennon "Aaron". VLOOKUP ensimmäisen merkinnän kohdalla. Sen jälkeen suoritus pysähtyy. Jos haluat jättää virheen huomiotta ja jatkaa loput ikäluokat etsimällä, käytä komentoa On Error Resume Next lausunto.
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
Kun olet suorittanut VBA-koodin, näet seuraavan tulosteen:
Kuten näet, soveltamalla On Error Resume Next komennolla jätimme virheen huomiotta ja löysimme loput henkilöiden iät. VBA-koodimme ei löytänyt Aaronin ja Emman tietoja. Siksi se jätti nämä arvot huomiotta ja palautti loput Excel-taulukon arvot.
Lue lisää: [Korjattu] Excel löysi ongelman yhden tai useamman kaavaviittauksen kanssa tässä laskentataulukossa.
Poista käytöstä "Virheessä jatketaan seuraavaksi" Excel VBA: lla
Nyt saatat olla tilanteessa, jossa haluat jättää huomiotta virheet VBA-koodin tietyssä segmentissä. Muista, että jos käytät VBA-koodissa On Error Resume Next -lausetta, se ohittaa kaikki sen jälkeiset virheet. Jos haluat kytkeä tämän pois päältä ja ottaa virheenkäsittelyn käyttöön toisessa segmentissä, käytä komentoa On Error GoTo 0 Se ottaa virheenkäsittelyn jälleen käyttöön.
Yleinen käyttö:
Sub error_handling()
Virheiden huomiotta jättäminen
On Error Resume Next
// koodirivit
Virheenkäsittelyn ottaminen käyttöön
On Error GoTo 0
//koodirivit
End sub
Katso seuraavaa VBA-koodia:
Sub error_handling() Dim i As Long 'jättää huomiotta virheen 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 'kytkeä pois päältä virheestä jatkaa seuraavaksi On Error GoTo 0 MsgBox i / 0 End Sub
Käytimme aiemmin koodia VLOOKUP Tähän on lisätty ylimääräinen koodinpätkä havainnollistamiseksi. Koodimme jättää virheet huomiotta suorittaessaan komentoa. VLOOKUP mutta se aktivoi virheenkäsittelyn sen jälkeen kun On Error GoTo 0 lausunto.
Lue lisää: Excel VBA: Kytke pois päältä "Virheen sattuessa jatka seuraavaksi".
VBA 'On Error GoTo'
Aiemmin käsittelin virheiden käsittelyä On Error -menetelmällä. Koko artikkelimme käsitteli vain On Error Resume Next. On myös kahdenlaisia virheenkäsittelytapoja, joita käsittelen seuraavissa kappaleissa.
1. VBA On Error GoTo 0
The On Error Goto 0 lauseke on Excelin sisäänrakennettu asetus, jos koodeissasi ei ole virheenkäsittelijää. Se tarkoittaa periaatteessa sitä, että kun VBA löytää virheen, jossa on On Error GoTo 0 , se pysäyttää koodin suorittamisen ja näyttää perinteisen virheilmoitusruutunsa.
On Error GoTo 0 lauseke periaatteessa kytkee virheenkäsittelyn pois päältä nykyisessä proseduurissa. Se ei määrittele riviä 0 virheenkäsittelykoodin aluksi, vaikka metodi sisältäisi rivin, jonka numero on 0.
Katso seuraavaa koodia:
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
Olemme jo näyttäneet tämän koodin. Tämä koodi periaatteessa piilottaa kaikki nykyisen työkirjan työarkit. Nyt minulla on todellakin ylimääräinen koodinpätkä, jossa on komento On Error GoTo 0 Jos suoritat koodin, näet seuraavaa:
Se näyttää tämän virheen, koska aktiivisessa työkirjassa ei voi olla samannimisiä arkkeja.
2. VBA On Error GoTo line
Nyt voit myös määrätä Excelin suorittamaan toisen koodisegmentin, jos se havaitsee virheen, käyttämällä komentoa On Error GoTo line Se käskee Exceliä suorittamaan jotain virheen havaitsemisen jälkeen.
Rivi-argumentti on mikä tahansa rivin tunniste tai rivin numero. Jos koodimme aiheuttaa jonkin suoritusaikaisen virheen, se siirtyy riville, jolloin virheenkäsittelijä aktivoituu suorituksessa. Muista, että määrittelemäsi rivin on oltava täsmälleen samassa proseduurissa kuin On Error -lausekkeen; muuten se aiheuttaa kääntämisvirheen.
Katso seuraavaa koodia:
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 "On olemassa myös saman niminen arkki. Kokeile toista." End Sub
Näit koodin edellisessä esimerkissä. Kun käytimme komentoa On Error GoTo 0 , se aiheutti virheen. Mutta tässä korvasimme sen seuraavalla komennolla On Error GoTo line lausunto.
Suorita koodi ja näet seuraavan:
Kuten näet, se ei näytä meille vakiovirhevalintaikkunaa, vaan mukautetun viestiruudun, jonka loimme komennossa error_handler Kun Excel löytää virheen, se siirtyy kohtaan error_handler segmentti ja näyttää meille viestiruudun.
Käytimme myös Exit Sub Jos menettelyssä ei ole arkkia nimeltä " VLOOKUP ", VBA-koodimme nimeää aktiivisen arkin uudelleen. Sitten meidän on lopetettava suoritus tähän, koska meidän ei tarvitse jatkaa virheenkäsittelijään ja näyttää viestiruutua.
VBA 'Virheessä' ei toimi Excelissä
Joskus, vaikka kuinka yrittäisit, On Error -menetelmä ei toimi. Aiemmin toteutimme On Error -menetelmän On Error menetelmää virheiden käsittelemiseksi. Mutta joskus se näyttää virheitä, vaikka käyttäisitkin On Error Resume Next tai On Error GoTo 0 Koodissasi saattaa olla useita syitä, jotka sinun on korjattava, mutta en aio näyttää niitä sinulle.
VBA:n perussyy ' On Error' Ei toimi Excelissä on Excelin "Break on All Errors" -vaihtoehdon kytkeminen päälle.
Seuraa näitä ohjeita ratkaistaksesi asian:
📌 Askeleet
- Paina ensin Alt+F11 näppäimistölläsi avataksesi VBA-editorin.
- Klikkaa nyt Työkalut> Vaihtoehdot.
- Napsauta sen jälkeen Yleistä välilehti Vaihtoehdot valintaikkuna.
- Tässä näet, " Keskeytä kaikki virheet " on jo tarkistettu. Se periaatteessa estää sinua käsittelemästä virheitä.
- Jos haluat muuttaa sitä, valitse vaihtoehto " Tauko käsittelemättömien virheiden yhteydessä " ja klikkaa OK .
Toivottavasti se korjaa ongelmasi VBA "On Error" ei toimi Excelissä.
Lue lisää: Excelin NAME-virheen syyt ja korjaukset (10 esimerkkiä)
💬 Muistettavaa
✎ On Error Resume Next ei korjaa virheitä, vaan jättää virheen huomiotta ja jatkaa seuraavaan lausekkeeseen.
✎ Excel ottaa kiinni ja tallentaa suoritusaikaiset virheet Err-objektiin. Kun käytämme komentoa On Error Resume Next lauseke tyhjentää Err-objektin ominaisuudet.
✎ Voit kytkeä pois päältä On Error Resume Next lauseke Excelin VBA-koodiin lisäämällä VBA-koodiin lausekkeen On Error GoTo 0 lausunto.
Päätelmä
Lopuksi toivon, että tämä opetusohjelma on antanut sinulle hyödyllistä tietoa, jonka avulla voit käyttää On Error Resume Next Excel VBA:ssa. Suosittelen, että opettelet ja sovellat kaikkia näitä ohjeita omassa datasetissäsi. Lataa harjoitustyökirja ja kokeile näitä itse. Anna myös rohkeasti palautetta kommenttiosiossa. Arvokas palautteesi pitää meidät motivoituneina luomaan tällaisia opetusohjelmia.
Älä unohda tarkistaa verkkosivujamme Exceldemy.com erilaisiin Exceliin liittyviin ongelmiin ja ratkaisuihin.
Jatka uusien menetelmien oppimista ja jatka kasvamista!