VBA viga - parimate tavade käsitlemisel viga

VBA vigade petuleht

Vead

KirjeldusVBA koodViga sees - Stoppkood ja kuvamisvigaVea korral läks 0On Error - jätke viga vahele ja jätkake töötamistVea korral Jätka järgmistVea korral - minge koodireale [silt]Tõrke korral läks [silt]Kustutab (lähtestab) tõrkeViga GoTo -1Kuva veanumberMsgBoxi vigane numberKuva vea kirjeldusMsgBoxi viga. KirjeldusFunktsioon oma vea genereerimiseksViga. Tõstke

Vaadake rohkem VBA „petulehti” ja tasuta PDF -allalaadimisi

VBA vigade käsitlemine

VBA vigade käsitlemine viitab VBA käitusaja vigade ennetamisele, avastamisele ja lahendamisele. VBA veakäsitlusprotsess toimub koodi kirjutamisel enne vigade tegelikku ilmnemist.

VBA käitusaja vead on vead, mis tekivad koodi täitmisel. Käitusaja vead on järgmised.

  • Olematule töövihikule, töölehele või muule objektile viitamine
  • Sobimatud andmed, nt. viide Exceli lahtrile, mis sisaldab viga
  • Katse jagada nulliga

VBA veateate kohta

Enamik VBA vigade käsitlemist tehakse Veateate kohta. Lause On Error ütleb VBA -le, mida teha, kui ilmneb tõrge. Seal on kolm Veateadete kohta:

  • Viga GoTo 0
  • Vea korral Jätka järgmist
  • Viga GoTo Rida

Viga GoTo 0

Viga GoTo 0 on VBA vaikeseade. Selle vaikeseade saate taastada, lisades järgmise koodirida:

1 Viga GoTo 0

Kui ilmneb viga koos Viga GoTo 0, VBA lõpetab koodi täitmise ja kuvab oma standardse veateate kasti.

Sageli lisate Viga GoTo 0 pärast lisamist Vea korral Jätka järgmist vigade käsitlemine (järgmine jaotis):

123456789 AlamvigaGoTo0 ()Vea korral Jätka järgmistActiveSheet.Shapes ("Start_Button"). KustutaViga GoTo 0'Käivitage rohkem koodiEnd Sub

Vea korral Jätka järgmist

Vea korral Jätka järgmist käsib VBA -l kõik vead sisaldavad koodirid vahele jätta ja järgmisele reale liikuda.

1 Vea korral Jätka järgmist

Märge: Vea korral Jätka järgmist ei paranda viga ega lahenda seda muul viisil. See lihtsalt käsib VBA -l jätkata, nagu poleks viga sisaldavat koodirida olemas. Ebaõige kasutamine Vea korral Jätka järgmist võib põhjustada soovimatuid tagajärgi.

Suurepärane aeg kasutamiseks Vea korral Jätka järgmist on objektidega töötamisel, mis võivad olemas olla või mitte. Näiteks soovite kirjutada mõne koodi, mis kustutab kuju, kuid kui käivitate koodi, kui kuju on juba kustutatud, annab VBA vea. Selle asemel saate kasutada Vea korral Jätka järgmist käskida VBA -l kuju kustutada, kui see on olemas.

123 Vea korral Jätka järgmistActiveSheet.Shapes ("Start_Button"). KustutaViga GoTo 0

Märkus, mille lisasime Viga GoTo 0 pärast võimalikku viga sisaldavat koodirida. See lähtestab veakäsitluse.

Järgmises jaotises näitame teile, kuidas testida, kas kasutamisel tekkis viga Viga. Arv, mis annab teile täpsemad veahaldusvalikud …

Err.Number, ErrClear ja püüdmisvead

Selle asemel, et lihtsalt viga ületavat rida vahele jätta, võime vea tuvastada kasutades Vea korral Jätka järgmist ja Viga. Arv.

Viga. Arv tagastab veanumbri, mis vastab tuvastatud vealiigile. Kui viga pole, Viga. Arv = 0.

Näiteks tagastab see protseduur väärtuse „11”, kuna ilmnev tõrge on Käitusaja viga '11'.

1234567 AlamvigaNumber_ex ()Vea korral Jätka järgmistActiveCell.Value = 2 /0MsgBoxi vigane numberEnd Sub

Viga käsitsemisel veaga Err.Number

Tõeline jõud Viga. Arv peitub võimes tuvastada, kas viga esines (Viga. Arv 0). Allolevas näites oleme loonud funktsiooni, mis testib lehe olemasolu olemasolu, kasutades funktsiooni Err.Number.

12345678910111213141516171819 AlamkatseWS ()MsgBox KasWSExist ("test")End SubFunktsioon Kas WSExist (wsName As String) on ​​BooleanDim ws töölehenaVea korral Jätka järgmistMäära ws = Sheets (wsName)'Kui viga WS pole olemasKui viga nr 0 siisDoesWSExist = ValeMuiduKasWSExist = TõsiLõpp KuiViga GoTo -1Lõppfunktsioon

Märkus: oleme lisanud a Viga GoTo -1 lõpuni, mis lähtestab Err.Number väärtuseks 0 (vt kaks jaotist allapoole).

Koos Vea korral Jätka järgmist ja Viga. Arv, saate kopeerida "Proovige" ja "püüdke" teiste programmeerimiskeelte funktsionaalsus.

Viga GoTo Rida

Viga GoTo Rida käsib VBA -l vea ilmnemisel "minna" märgistatud koodireale. Deklareerite käsu Mine edasi niimoodi (kus errHandler on rea silt, kuhu minna):

1 Viga GoTo errHandler

ja looge selline rea silt:

1 errHandler:

Märkus. See on sama silt, mida kasutaksite tavalise VBA GoTo väljavõttega.

Allpool demonstreerime kasutamist Viga GoTo Rida protseduurist väljumiseks.

On Error Exit Sub

Saate kasutada funktsiooni On Error GoTo Line, et tõrke ilmnemisel alamist väljuda.

Seda saate teha, asetades veahalduri rea sildi oma protseduuri lõppu:

12345678 Alam ErrGoToEnd ()Viga GoTo endProc"Mingi koodendProc:End Sub

või kasutades käsku Exit Sub:

123456789101112131415 Alam ErrGoToEnd ()Viga GoTo endProc"Mingi koodGoTo vahelejätmineendProc:Välju subskipExit:'Veel natuke koodiEnd Sub

Err.Clear, On Error GoTo -1 ja Reset Err.Number

Pärast vea käsitlemist peaksite vea üldiselt kustutama, et vältida tulevasi tõrke käsitlemise probleeme.

Pärast tõrke ilmnemist, mõlemad Viga. Selge ja Viga GoTo -1 saab kasutada lähtestamiseks Viga. Arv kuni 0. Kuid on üks väga oluline erinevus: Viga. Selge ei lähtesta tegelikku viga ise, vaid lähtestab ainult Viga. Arv.

Mida see tähendab? KasutadesViga. Selge, ei saa te veakäsitluse seadistust muuta. Erinevuse nägemiseks proovige seda koodi ja asendage see Viga GoTo -1 koos Viga. Selge:

123456789101112131415161718192021 AlamveadNäited ()Viga GoTo errHandler:"Rakenduse määratletud" vigaViga (13)Välju suberrHandler:'Selge vigaViga GoTo -1Viga GoTo errHandler2:'Tüübi mittevastavuse vigaViga (1034)Välju suberrHandler2:Silumine. Prindi viga. KirjeldusEnd Sub

Tavaliselt soovitan alati kasutada Viga GoTo -1, kui teil pole mõjuvat põhjust seda kasutada Viga. Selge selle asemel.

VBA viga MsgBox

Võimalik, et soovite kuvada veateate sõnumikasti. Selles näites kuvatakse erinevad sõnumikastid sõltuvalt vea ilmnemise kohast:

12345678910111213141516171819202122232425262728 AlamvigaMessageEx ()Dim errMsg stringinaViga GoTo errHandler'1. etapperrMsg = "Kopeerimise ja kleepimise etapis ilmnes viga."„Viga. Tõstmine (11)'2. etapperrMsg = "Andmete valideerimise etapis ilmnes viga."„Viga. Tõstmine (11)'3. etapperrMsg = "P & L-ehitamise ja kopeerimise etapis ilmnes viga."Viga. Tõstmine (11)'4. etapperrMsg = "Häälestuslehel importimise logimisel ilmnes viga"„Viga. Tõstmine (11)Mine Proci lõpetamisekserrHandler:MsgBox viga MsgendProc:End Sub

Siin asendaksite Err.Raise (11) oma tegeliku koodiga.

VBA IsError

Teine viis vigade käsitlemiseks on testida neid VBA IsError funktsiooni abil. Funktsioon IsError kontrollib avaldist vigade osas, tagastades tõrke korral tõe või vale.

123 Sub IsErrorEx ()MsgBox IsError (vahemik ("a7"). Väärtus)End Sub

Kui viga VBA

Vigadega saate hakkama ka VBA -s Exceli funktsiooni IfError abil. Funktsioonile IfError tuleb juurde pääseda, kasutades Tööleht Funktsiooniklass:

1234567 Sub IfErrorEx ()Dim n Nagu pikkn = WorksheetFunction.IfError (Vahemik ("a10"). Väärtus, 0)MsgBox nEnd Sub

See väljastab vahemiku A10 väärtuse, kui väärtus on viga, siis selle asemel 0.

VBA veatüübid

Käitusaja vead

Nagu eespool öeldud:

VBA käitusaja vead on vead, mis tekivad koodi täitmisel. Käitusaja vead on järgmised.

  • Olematule töövihikule, töölehele või muule objektile viitamine
  • Sobimatud andmed, nt. viide Exceli lahtrile, mis sisaldab viga
  • Katse jagada nulliga

Saate veatöötlusvigadega hakkama saada, kasutades ülalkirjeldatud meetodeid.

Süntaksi vead

VBA süntaksi vead on koodi kirjutamisel vigu. Süntaksivigade näited on järgmised.

  • Kirjaviga
  • Kirjavahemärgid puuduvad või on valed

VBA redaktor tuvastab punase esiletõstmisega palju süntaksivigu:

VBA redaktoril on ka valik „Automaatne süntaksi kontroll”:

Kui see on märgitud, loob VBA redigeerija pärast koodirida sisestamist sõnumikasti, mis hoiatab teid süntaksivigade eest:

Mulle isiklikult tundub see äärmiselt tüütu ja keelan selle funktsiooni.

Kompileeri vead

Enne protseduuri käivitamist kompileerib VBA protseduuri. Kompileerimine muudab programmi lähtekoodist (mida näete) täitmisvormiks (te ei näe).

VBA kompileerimisvead on vead, mis takistavad koodi koostamist.

Hea näide kompileerimisveast on puuduv muutuja deklaratsioon:

Teiste näidete hulka kuuluvad:

  • Sest ilma Edasi
  • Valige ilma Lõpp Vali
  • Kui ilma Lõpp Kui
  • Helistades a protseduuri mida pole olemas

Süntaksivead (eelmine jaotis) on kompileerimisvigade alamhulk.

Silumine> Kompileeri

Protseduuri käivitamisel ilmuvad kompileerimisvead. Kuid ideaalis tuvastaksite kompileerimisvead enne protseduuri käivitamist.

Seda saate teha, koostades projekti ette. Selleks minge aadressile Silumine> VBA projekti koostamine.

Kompilaator "läheb" esimese vea juurde. Kui olete selle vea parandanud, kompileerige projekt uuesti. Korrake, kuni kõik vead on parandatud.

Võite öelda, et kõik vead on parandatud, sest Koosta VBA projekt muutub halliks:

Ülevoolu viga

The VBA ülevoolu viga tekib siis, kui proovite väärtust sisestada liiga suurele muutujale. Näiteks, Täisarvulised muutujad võib sisaldada ainult väärtusi vahemikus -32 768 kuni 32 768. Kui sisestate suurema väärtuse, kuvatakse ületäitmisviga:

Selle asemel peaksite kasutama Pikk muutuja suurema arvu salvestamiseks.

Muud VBA veatingimused

VBA püüdmisviga

Erinevalt teistest programmeerimiskeeltest pole VBA -s ühtegi Saak. Siiski saate saagi avaldust kopeerida, kasutades Vea korral Jätka järgmist ja Kui viga nr 0 siis. Seda käsitletakse eespool jaotises Vigade käsitlemine veaga Err.Number.

VBA Ignoreeri viga

VBA vigade ignoreerimiseks kasutage lihtsalt Vea korral Jätka järgmist avaldus:

1 Vea korral Jätka järgmist

Kuid nagu eespool mainitud, peaksite selle avalduse kasutamisel olema ettevaatlik, kuna see ei paranda viga, vaid lihtsalt ignoreerib viga sisaldavat koodirida.

VBA viske viga / tõrge

VBA vea lahendamiseks kasutage Viga. Tõstke meetod.

See koodirida tõstab käitusaja tõrke „13”: tüübi mittevastavus:

1 Viga. Tõstmine (13)

VBA vigade püüdmine

VBA vigade püüdmine on lihtsalt teine ​​termin VBA veakäsitluse jaoks.

VBA veateade

A VBA veateade näeb välja selline:

Kui klõpsate nupul „Silumine”, näete vea põhjustavat koodirida:

VBA vigade käsitlemine silmuses

Parim viis vea käsitlemiseks silmuse sees on kasutamine Vea korral Jätka järgmist koos Viga. Arv vea tuvastamiseks (ärge unustage kasutada Viga. Selge vea kõrvaldamiseks pärast iga esinemist).

Allolev näide jagab kaks numbrit (veerg A veeruga B) ja väljastab tulemuse veergu C. Kui ilmneb tõrge, on tulemuseks 0.

12345678910111213141516 Alamkatse ()Hämardage rakk vahemikunaVea korral Jätka järgmistIga vahemiku lahtri kohta ("a1: a10")'Määrake lahtri väärtuscell.Offset (0, 2) .Value = cell.Value / cell. Offset (0, 1). Value'Kui Cell.Value on viga, siis vaikimisi 0Kui viga nr 0 siislahter. Nihe (0, 2). Väärtus = 0Viga. SelgeLõpp KuiEdasiEnd Sub

VBA tõrgete käsitlemine Accessis

Kõik ülaltoodud näited töötavad Access VBA -s täpselt samamoodi nagu Excel VBA -s.

123456789101112131415161718 Funktsioon DelRecord (vormist)'seda funktsiooni kasutatakse vormis oleva tabeli kirje kustutamiseksViga GoTo lõpetamineKoos frmKui .UusRekord Siis.TühistaVälju funktsioonLõpp KuiLõpetaKoos frm.RecordsetClone'iga. Bookmark = frm. Bookmark.Kustutafrm. PäringLõpetaVälju funktsioonlõpp:LõppLõppfunktsioon

Te aitate arengu ala, jagades leht oma sõpradega

wave wave wave wave wave