VBA pri chybe - osvedčené postupy pri riešení chýb

VBA chyby podvádza

Chyby

PopisKód VBAPri chybe - Zastavte kód a zobrazte chybuPri chybe Choďte na 0Pri chybe - preskočte chybu a pokračujte v prevádzkePri chybe Pokračovať ďalejPri chybe - Prejdite na riadok kódu [Štítok]Pri chybe Choďte na [štítok]Vymaže (resetuje) chybuPri chybe GoTo -1Zobraziť číslo chybyMsgBox Err.ČísloZobraziť popis chybyMsgBox Err.PopisFunkcia na generovanie vlastnej chybyErr. Raise

Pozrite si ďalšie „Cheat Sheets“ VBA a bezplatné sťahovanie súborov PDF

Spracovanie chýb VBA

Spracovanie chýb VBA sa týka procesu predvídania, zisťovania a riešenia chýb runtime VBA. Proces spracovania chýb VBA nastáva pri písaní kódu skôr, ako sa skutočne vyskytnú chyby.

Chyby runtime VBA sú chyby, ktoré sa vyskytujú počas vykonávania kódu. Medzi príklady chýb za behu patrí:

  • Odkazovanie na neexistujúci zošit, pracovný hárok alebo iný objekt
  • Neplatné údaje napr. odkazovanie na bunku programu Excel obsahujúcu chybu
  • Pokus o delenie nulou

VBA o vyhlásení o chybe

Väčšina spracovania chýb VBA sa vykonáva pomocou Vo vyhlásení o chybe. Príkaz On Error hovorí VBA, čo má robiť, ak narazí na chybu. Sú tam tri O chybových hláseniach:

  • Pri chybe GoTo 0
  • Pri chybe Pokračovať ďalej
  • Pri chybe GoTo Riadok

Pri chybe GoTo 0

Pri chybe GoTo 0 je predvolené nastavenie VBA. Toto predvolené nastavenie môžete obnoviť pridaním nasledujúceho riadku kódu:

1 Pri chybe GoTo 0

Keď sa vyskytne chyba s Pri chybe GoTo 0, VBA zastaví spustenie kódu a zobrazí štandardné pole s chybovým hlásením.

Často pridáte príponu Pri chybe GoTo 0 po pridaní Pri chybe Pokračovať ďalej spracovanie chýb (ďalšia časť):

123456789 Vedľajšia chybaGoTo0 ()Pri chybe Pokračovať ďalejActiveSheet.Shapes ("Start_Button"). OdstrániťPri chybe GoTo 0„Spustiť viac kóduKoniec pod

Pri chybe Pokračovať ďalej

Pri chybe Pokračovať ďalej hovorí VBA, aby preskočila všetky riadky kódu obsahujúce chyby a pokračovala na nasledujúci riadok.

1 Pri chybe Pokračovať ďalej

Poznámka: Pri chybe Pokračovať ďalej neopravuje chybu ani ju inak nerieši. Jednoducho to VBA povie, aby postupovalo, ako keby riadok kódu obsahujúci chybu neexistoval. Nesprávne používanie Pri chybe Pokračovať ďalej môže mať za následok nechcené následky.

Skvelý čas na použitie Pri chybe Pokračovať ďalej je pri práci s predmetmi, ktoré môžu, ale nemusia existovať. Napríklad chcete napísať nejaký kód, ktorý odstráni tvar, ale ak kód spustíte, keď je tvar už odstránený, VBA vyvolá chybu. Namiesto toho môžete použiť Pri chybe Pokračovať ďalej povedať VBA, aby odstránil tvar, ak existuje.

123 Pri chybe Pokračovať ďalejActiveSheet.Shapes ("Start_Button"). OdstrániťPri chybe GoTo 0

Všimli sme si, že sme pridali Pri chybe GoTo 0 za riadok kódu obsahujúci potenciálnu chybu. Tým sa resetuje spracovanie chýb.

V nasledujúcej časti vám ukážeme, ako otestovať, či sa pri použití vyskytla chyba Err.číslo, čím získate pokročilejšie možnosti spracovania chýb …

Chybné číslo, chybné číslo a chyby chytania

Namiesto toho, aby sme jednoducho preskočili riadok obsahujúci chybu, môžeme chybu zachytiť pomocou Pri chybe Pokračovať ďalej a Err.číslo.

Err.číslo vráti číslo chyby zodpovedajúce typu zistenej chyby. Ak nie je žiadna chyba, Err.číslo = 0.

Tento postup napríklad vráti „11“, pretože chyba, ktorá sa vyskytne, je Chyba pri spustení „11“.

1234567 Vedľajšia chybaČíslo_ex ()Pri chybe Pokračovať ďalejActiveCell.Value = 2/0Číslo MsgBox Err.Koniec pod

Riešenie chýb s číslom Err.

Skutočná sila Err.číslo spočíva v schopnosti zistiť, či došlo k chybe (Err.číslo 0). V nižšie uvedenom príklade sme vytvorili funkciu, ktorá pomocou Err.Number otestuje, či hárok existuje.

12345678910111213141516171819 Sub testWS ()MsgBox DoesWSExist („test“)Koniec podFunkcia DoesWSExist (wsName As String) As BooleanDim ws As worksheetPri chybe Pokračovať ďalejNastaviť ws = hárky (wsName)„Ak chyba WS neexistujeAk Err.Number 0 PotomDoesWSExist = FalseInakDoesWSExist = PravdaKoniec AkPri chybe GoTo -1Koncová funkcia

Poznámka: Pridali sme a Pri chybe GoTo -1 na koniec, ktorý vynuluje Err.Number na 0 (pozri dve časti dole).

S Pri chybe Pokračovať ďalej a Err.číslo, môžete replikovať súbor "Skús chytiť" funkčnosť iných programovacích jazykov.

Pri chybe GoTo Riadok

Pri chybe GoTo Riadok hovorí VBA, aby pri chybe „prešiel“ na označený riadok kódu. Príkaz Prejsť na deklarujete takto (kde errHandler je menovka riadku, na ktorú sa má prejsť):

1 Pri chybe GoTo errHandler

a vytvorte riadkový štítok takto:

1 errHandler:

Poznámka: Toto je rovnaký štítok, ktorý by ste použili s bežným vyhlásením VBA GoTo.

Nižšie si ukážeme používanie Pri chybe GoTo Riadok ukončiť procedúru.

Pri chybe Ukončiť Pod

Riadok On Error GoTo Line môžete použiť na ukončenie podradenej položky v prípade chyby.

Môžete to urobiť tak, že na koniec postupu umiestnite štítok riadka popisovača chýb:

12345678 Sub ErrGoToEnd ()Pri chybe GoTo endProc„Nejaký kódendProc:Koniec pod

alebo pomocou príkazu Exit Sub:

123456789101112131415 Sub ErrGoToEnd ()Pri chybe GoTo endProc„Nejaký kódGoTo skipExitendProc:Ukončiť subskipExit:„Ďalší kódKoniec pod

Err.Clear, On Error GoTo -1 a resetovanie Err.Number

Po odstránení chyby by ste ju mali spravidla vymazať, aby ste predišli budúcim problémom s riešením chýb.

Potom, čo sa vyskytne chyba, obaja Err. Jasné a Pri chybe GoTo -1 možno použiť na resetovanie Err.číslo až 0. Existuje však jeden veľmi dôležitý rozdiel: Err. Jasné neresetuje samotnú skutočnú chybu, ale iba vynuluje Err.číslo.

Čo to znamená? PoužitímErr. Jasné, nebudete môcť zmeniť nastavenie spracovania chýb. Ak chcete vidieť rozdiel, vyskúšajte tento kód a nahraďte ho Pri chybe GoTo -1 s Err. Jasné:

123456789101112131415161718192021 Sub ErrExamples ()Pri chybe GoTo errHandler:Chyba „Definované aplikáciou“Chyba (13)Ukončiť suberrHandler:'Vymazať chybuPri chybe GoTo -1Pri chybe GoTo errHandler2:Chyba „Neshoda typov“Chyba (1034)Ukončiť suberrHandler2:Debug.Print Err.PopisKoniec pod

Spravidla odporúčam vždy používať Pri chybe GoTo -1, pokiaľ nemáte pádny dôvod na použitie Err. Jasné namiesto.

Chyba VBA MsgBox

Môžete tiež chcieť zobraziť pole so správou pri chybe. Tento príklad zobrazí rôzne polia so správami v závislosti od toho, kde sa chyba vyskytla:

12345678910111213141516171819202122232425262728 Sub ErrorMessageEx ()Dim errMsg ako reťazecPri chybe GoTo errHandler„Fáza 1errMsg = "Počas fázy kopírovania a prilepenia sa vyskytla chyba."„Err.Raise (11)„Fáza 2errMsg = "Počas fázy overovania údajov sa vyskytla chyba."„Err.Raise (11)„Etapa 3errMsg = "Vo fáze vytvárania P & L a kopírovania sa vyskytla chyba."Err.Raise (11)„Fáza 4errMsg = "Pri pokuse o prihlásenie importu na stránku nastavenia došlo k chybe"„Err.Raise (11)Choďte na koniecProcerrHandler:MsgBox errMsgendProc:Koniec pod

Tu by ste nahradili Err.Raise (11) svojim skutočným kódom.

VBA je chyba

Ďalším spôsobom, ako zvládnuť chyby, je otestovať ich pomocou funkcie VBA IsError. Funkcia IsError testuje chyby vo výraze, pričom v prípade chyby vráti hodnotu TRUE alebo FALSE.

123 Sub IsErrorEx ()MsgBox IsError (rozsah ("a7"). Hodnota)Koniec pod

Ak sa vyskytne chyba VBA

Chyby vo VBA zvládnete aj pomocou funkcie Excel IfError. K funkcii IfError je potrebné pristupovať pomocou Pracovný list Funkčná trieda:

1234567 Sub IfErrorEx ()Dim n As Longn = WorksheetFunction.IfError (rozsah ("a10"). hodnota, 0)MsgBox čKoniec pod

Výsledkom bude hodnota rozsahu A10, ak je hodnota chybou, namiesto toho sa zobrazí 0.

Typy chýb VBA

Chyby runtime

Ako je uvedené vyššie:

Chyby runtime VBA sú chyby, ktoré sa vyskytujú počas vykonávania kódu. Medzi príklady chýb za behu patrí:

  • Odkazovanie na neexistujúci zošit, pracovný hárok alebo iný objekt
  • Neplatné údaje napr. odkazovanie na bunku programu Excel obsahujúcu chybu
  • Pokus o delenie nulou

Chyby runtime „zvládnuť chybu“ môžete pomocou vyššie uvedených metód.

Chyby syntaxe

Chyby syntaxe VBA sú chyby pri písaní kódu. Medzi príklady chýb syntaxe patrí:

  • Nesprávne
  • Chýbajúca alebo nesprávna interpunkcia

Editor VBA identifikuje mnoho syntaktických chýb červeným zvýraznením:

Editor VBA má tiež možnosť „Automatickej kontroly syntaxe“:

Keď je to začiarknuté, editor VBA vygeneruje okno so správou, ktoré vás upozorní na chyby syntaxe po zadaní riadka kódu:

Mne osobne to pripadá veľmi nepríjemné a túto funkciu deaktivujem.

Chyby kompilácie

Pred pokusom o spustenie procedúry VBA procedúru „skomplikuje“. Kompilácia transformuje program zo zdrojového kódu (ktorý vidíte) do spustiteľnej podoby (nevidíte).

Chyby kompilácie VBA sú chyby, ktoré bránia kompilácii kódu.

Dobrým príkladom chyby kompilácie je chýbajúca deklarácia premennej:

Medzi ďalšie príklady patria:

  • Pre bez Ďalšie
  • Vyberte bez Ukončiť výber
  • Ak bez Koniec Ak
  • Volanie a postup to neexistuje

Chyby syntaxe (predchádzajúca časť) sú podmnožinou chýb kompilácie.

Ladenie> Kompilovať

Pri pokuse o spustenie procedúry sa zobrazia chyby kompilácie. V ideálnom prípade by ste však pred pokusom o spustenie postupu identifikovali chyby pri kompilácii.

Môžete to urobiť tak, že projekt skompilujete vopred. Ak to chcete urobiť, prejdite na stránku Ladenie> Kompilovať projekt VBA.

Kompilátor „prejde“ na prvú chybu. Hneď ako chybu opravíte, skompilovajte projekt znova. Opakujte, kým nie sú všetky chyby opravené.

Môžete povedať, že všetky chyby sú opravené, pretože Zostavte projekt VBA budú sivé:

Chyba pretečenia

The Chyba pretečenia VBA nastane, keď sa pokúsite vložiť hodnotu do príliš veľkej premennej. Napríklad, Celočíselné premenné môže obsahovať iba hodnoty od -32 768 do 32 768. Ak zadáte väčšiu hodnotu, zobrazí sa chyba pretečenia:

Namiesto toho by ste mali použiť Dlhá premenná na uloženie väčšieho počtu.

Ďalšie podmienky chyby VBA

Chyba zachytenia VBA

Na rozdiel od iných programovacích jazykov, vo VBA neexistuje Vyhlásenie o úlovku. Vyhlásenie o úlovkoch však môžete replikovať pomocou Pri chybe Pokračovať ďalej a Ak Err.Number 0 Potom. Toto je popísané vyššie v časti Manipulácia s chybami s číslom Err.Number.

Chyba ignorovania VBA

Ak chcete ignorovať chyby vo VBA, jednoducho použite Pri chybe Pokračovať ďalej vyhlásenie:

1 Pri chybe Pokračovať ďalej

Ako je však uvedené vyššie, pri použití tohto príkazu by ste mali byť opatrní, pretože neopravuje chybu, iba ignoruje riadok kódu obsahujúci chybu.

Chyba pri hode VBA / Zvýšenie

Na chybu vo VBA použite príkaz Err. Raise metóda.

Tento riadok kódu spôsobí chybu pri spustení „13“: Nesúlad typov:

1 Err.Raise (13)

Chybové zachytávanie VBA

Chybové zachytávanie VBA je len ďalší výraz pre spracovanie chýb VBA.

Chybové hlásenie VBA

A Chybové hlásenie VBA vyzerá takto:

Po kliknutí na položku „Ladiť“ sa zobrazí riadok kódu, ktorý spôsobuje chybu:

Spracovanie chýb VBA v slučke

Najlepším spôsobom, ako spracovať chyby v slučke, je pomocou Pri chybe Pokračovať ďalej spolu s Err.číslo zistiť, či došlo k chybe (Nezabudnite použiť Err. Jasné vymazať chybu po každom výskyte).

Nasledujúci príklad rozdelí dve čísla (stĺpec A na stĺpec B) a výsledok vynesie do stĺpca C. Ak dôjde k chybe, výsledok bude 0.

12345678910111213141516 Vedľajší test ()Dim bunka ako rozsahPri chybe Pokračovať ďalejPre každú bunku v rozsahu („a1: a10“)„Nastavte hodnotu bunkycell.Offset (0, 2) .Value = cell.Value / cell.Offset (0, 1) .Value„Ak je Cell.Value chyba, potom je predvolená hodnota 0Ak Err.Number 0 Potombunka. Odsadenie (0, 2). Hodnota = 0Err. JasnéKoniec AkĎalšieKoniec pod

Spracovanie chýb VBA v programe Access

Všetky vyššie uvedené príklady fungujú v programe Access VBA úplne rovnako ako v programe Excel VBA.

123456789101112131415161718 Funkcia DelRecord (ako formulár)„táto funkcia sa používa na vymazanie záznamu v tabuľke z formuláraPri chybe GoTo končíS frmAk .Nový Záznam Potom.Vrátenie späťUkončiť funkciuKoniec AkUkončiť sS frm.RecordsetClone.Bookmark = frm.Bookmark.Odstrániťfrm. PožiadavkaUkončiť sUkončiť funkciukoniec:KoniecKoncová funkcia

Vám pomôže rozvoju miesta, zdieľať stránku s priateľmi

wave wave wave wave wave