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õstkeVaadake 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 |