VBA hibák csalólap
Hibák
LeírásVBA kódOn Error - Stop kód és megjelenítési hibaHiba: Goto 0On Error - Kihagyja a hibát, és folytatja a futástHiba esetén Folytassa a következőtHiba esetén - Ugrás a kód sorára [Címke]Hiba a hiba miatt [címke]Törli (visszaállítja) a hibátGoTo -1 hiba eseténHiba szám megjelenítéseMsgBox hibaszámHiba leírásának megjelenítéseMsgBox Err. LeírásFunkció saját hiba generálásáraErr. Emelje felTovábbi VBA „Családlapok” és ingyenes PDF letöltések
VBA hibakezelés
VBA hibakezelés a VBA futásidejű hibák előrejelzésére, észlelésére és megoldására utal. A VBA hibakezelési folyamat a kód írásakor történik, mielőtt bármilyen hiba bekövetkezik.
VBA futásidejű hibák a kód végrehajtása során előforduló hibák. Példák a futásidejű hibákra:
- Nem létező munkafüzetre, munkalapra vagy más objektumra való hivatkozás
- Érvénytelen adatok, pl. hibát tartalmazó Excel cellára hivatkozni
- Kísérlet a nullával való osztásra
VBA Hibajelentés
A legtöbb VBA hibakezelést a A hibajelentésről. Az On Error utasítás megmondja a VBA -nak, hogy mit kell tennie, ha hibát észlel. Itt három van A hibajelentésekről:
- GoTo 0 hiba esetén
- Hiba esetén Folytassa a következőt
- GoTo hiba esetén Vonal
GoTo 0 hiba esetén
GoTo 0 hiba esetén a VBA alapértelmezett beállítása. Ezt az alapértelmezett beállítást a következő kódsor hozzáadásával állíthatja vissza:
1 | GoTo 0 hiba esetén |
Amikor hiba történik a GoTo 0 hiba esetén, A VBA leállítja a kódfuttatást, és megjeleníti a szokásos hibaüzenet -mezőt.
Gyakran hozzáad egy GoTo 0 hiba esetén hozzáadása után Hiba esetén Folytassa a következőt hibakezelés (következő rész):
123456789 | Sub ErrorGoTo0 ()Hiba esetén Folytassa a következőtActiveSheet.Shapes ("Start_Button"). TörlésGoTo 0 hiba esetén'Futtasson több kódotEnd Sub |
Hiba esetén Folytassa a következőt
Hiba esetén Folytassa a következőt utasítja a VBA -t, hogy hagyja ki a hibákat tartalmazó kódsorokat, és folytassa a következő sorral.
1 | Hiba esetén Folytassa a következőt |
Jegyzet: Hiba esetén Folytassa a következőt nem javítja a hibát, vagy más módon nem oldja meg. Egyszerűen azt mondja a VBA -nak, hogy úgy járjon el, mintha a hibát tartalmazó kódsor nem létezne. Helytelen használata Hiba esetén Folytassa a következőt nem kívánt következményekhez vezethet.
Remek alkalom a használatra Hiba esetén Folytassa a következőt akkor, ha olyan objektumokkal dolgozik, amelyek léteznek vagy nem léteznek. Például szeretne olyan kódot írni, amely törli az alakzatot, de ha futtatja a kódot, amikor az alakzat már törlődik, a VBA hibát jelez. Ehelyett használhatja Hiba esetén Folytassa a következőt utasítani a VBA -t, hogy törölje az alakzatot, ha létezik.
123 | Hiba esetén Folytassa a következőtActiveSheet.Shapes ("Start_Button"). TörlésGoTo 0 hiba esetén |
Figyeljük meg, hogy hozzáadtuk GoTo 0 hiba esetén a lehetséges hibát tartalmazó kódsor után. Ez visszaállítja a hibakezelést.
A következő részben megmutatjuk, hogyan tesztelheti, hogy hiba történt -e a használattal Hibás szám, fejlettebb hibakezelési lehetőségeket kínál…
Err.Number, Err.Clear és elkapó hibák
Ahelyett, hogy egyszerűen átugranánk egy hibát tartalmazó sort, a hibát a használatával érhetjük el Hiba esetén Folytassa a következőt és Hibás szám.
Hibás szám az észlelt hiba típusának megfelelő hibaszámot ad vissza. Ha nincs hiba, Hibás szám = 0.
Például ez az eljárás visszaadja a „11” értéket, mert az előforduló hiba az Futásidejű hiba '11'.
1234567 | AlhibaNumber_ex ()Hiba esetén Folytassa a következőtActiveCell.Value = 2 /0MsgBox hibaszámEnd Sub |
Hiba kezelése az Err.Number használatával
Az igazi ereje Hibás szám abban rejlik, hogy képes észlelni, ha hiba történt (Hibás szám 0). Az alábbi példában létrehoztunk egy függvényt, amely az Err.Number használatával teszteli, hogy létezik -e lap.
12345678910111213141516171819 | Rész tesztWS ()Az MsgBox létezikWSExist ("teszt")End SubA függvény WSExist (wsName As String) BooleanDim ws munkalapkéntHiba esetén Folytassa a következőtSet ws = Sheets (wsName)'Ha a WS hiba nem létezikHa Err.Number 0 AkkorDoesWSExist = HamisMásDoesWSExist = IgazVége HaGoTo -1 hiba eseténVége funkció |
Megjegyzés: Hozzáadtuk a GoTo -1 hiba esetén a végére, amely visszaállítja az Err.Number értékét 0 -ra (lásd két részt lefelé).
Val vel Hiba esetén Folytassa a következőt és Hibás szám, megismételheti a „Próbáld ki” és „Fogd meg” más programozási nyelvek funkcionalitása.
GoTo hiba esetén Vonal
GoTo hiba esetén Vonal utasítja a VBA -t, hogy hiba esetén „menjen” egy címkés kódsorba. A Go To utasítást így deklarálja (ahol az errHandler a sorcímke)
1 | On Error GoTo errHandler |
és hozzon létre egy ilyen sorcímkét:
1 | errHandler: |
Megjegyzés: Ugyanaz a címke, amelyet a szokásos VBA GoTo kimutatással használna.
Az alábbiakban bemutatjuk a használatát GoTo hiba esetén Vonal kilépni egy eljárásból.
Hiba esetén lépjen ki az almenüből
Az On Error GoTo Line használatával kiléphet az albázisból hiba esetén.
Ezt úgy teheti meg, hogy az eljárás végén elhelyezi a hibakezelő sor címkéjét:
12345678 | Sub ErrGoToEnd ()On GoTo endProc hiba- Valami kódendProc:End Sub |
vagy az Exit Sub parancs használatával:
123456789101112131415 | Sub ErrGoToEnd ()On GoTo endProc hiba- Valami kódGoTo skipEitendProc:Kilépés a Subbólkihagyás:- Még néhány kódEnd Sub |
Err.Clear, On Error GoTo -1, és Reset Err.Number
A hiba kezelése után általában törölnie kell a hibát, hogy megelőzze a hibakezeléssel kapcsolatos további problémákat.
Hiba bekövetkezése után, mindkét Hiba. Világos és GoTo -1 hiba esetén visszaállítható Hibás szám de van egy nagyon fontos különbség: Hiba. Világos magát a tényleges hibát nem állítja vissza, csak a Hibás szám.
Az mit jelent? HasználataHiba. Világos, nem tudja módosítani a hibakezelési beállítást. A különbség megtekintéséhez próbálja ki ezt a kódot, és cserélje ki GoTo -1 hiba esetén val vel Hiba. Világos:
123456789101112131415161718192021 | Sub ErrPéldák ()Hiba esetén GoTo errHandler:"" Alkalmazás által meghatározott "hibaHiba (13)Kilépés a SubbólerrHandler:'Hiba törléseGoTo -1 hiba eseténA GoTo errHandler2 hiba esetén:"Típus -eltérés" hibaHiba (1034)Kilépés a SubbólerrHandler2:Hibakeresés. Nyomtatási hiba. LeírásEnd Sub |
Általában azt javaslom, hogy mindig használja GoTo -1 hiba esetén, hacsak nincs jó oka a használatára Hiba. Világos helyette.
VBA az MsgBox hibán
Lehet, hogy hibaüzenet üzenetdobozt is szeretne megjeleníteni. Ez a példa különböző üzenetmezőket jelenít meg a hiba előfordulási helyétől függően:
12345678910111213141516171819202122232425262728 | Sub ErrorMessageEx ()Dim errMsg karakterlánckéntOn Error GoTo errHandler'1. szakaszerrMsg = "Hiba történt a Másolás és beillesztés szakaszban."„Err. Raise (11)'2. szakaszerrMsg = "Hiba történt az adatellenőrzési szakaszban."„Err. Raise (11)'3. szakaszerrMsg = "Hiba történt a P & L-Building és Copy-Over szakaszban."Err. Emelés (11)'4. szakaszerrMsg = "Hiba történt az importálás naplózásakor a telepítő oldalon"„Err. Raise (11)GoTo endProcerrHandler:MsgBox hibaMsgendProc:End Sub |
Itt lecserélné az Err.Raise (11) kódot a tényleges kódjára.
VBA IsError
A hibák kezelésének másik módja a VBA IsError funkcióval történő tesztelés. Az IsError függvény tesztel egy kifejezést hibákra, és IGAZ vagy HAMIS értéket ad vissza hiba esetén.
123 | Sub IsErrorEx ()MsgBox IsError (tartomány ("a7"). Érték)End Sub |
Ha hiba VBA
A hibákat a VBA -ban is kezelheti az Excel IfError függvénnyel. Az IfError függvényt a Funkció osztály:
1234567 | IfErrorEx ()Dim n Olyan hosszún = WorksheetFunction.IfError (Tartomány ("a10"). Érték, 0)MsgBox nEnd Sub |
Ez az A10 tartomány értékét adja ki, ha az érték hiba, akkor 0 -t ad ki.
VBA hibatípusok
Futásidejű hibák
Ahogy a fentiekben írják:
VBA futásidejű hibák a kód végrehajtása során előforduló hibák. Példák a futásidejű hibákra:
- Nem létező munkafüzetre, munkalapra vagy más objektumra való hivatkozás
- Érvénytelen adatok, pl. hibát tartalmazó Excel cellára hivatkozni
- Kísérlet nullával osztani
A futásidejű hibákat „hibakezelésre” használhatja a fent ismertetett módszerekkel.
Szintaktikai hibák
VBA szintaktikai hibák hibák vannak a kódírással. Példák a szintaktikai hibákra:
- Hibás írás
- Hiányzó vagy helytelen írásjelek
A VBA szerkesztő számos szintaktikai hibát azonosít piros kiemeléssel:
A VBA szerkesztőben lehetőség van az „Automatikus szintaxis ellenőrzés” lehetőségre is:
Ha ez be van jelölve, a VBA szerkesztő egy üzenetdobozt generál, amely figyelmeztet a szintaktikai hibákra, miután beírt egy kódsort:
Én személy szerint rendkívül idegesítőnek tartom, és letiltom a funkciót.
Fordítási hibák
Az eljárás futtatása előtt a VBA „lefordítja” az eljárást. A fordítás a programot a forráskódból (amit láthat) végrehajtható formává alakítja át (nem láthatja).
VBA fordítási hibák olyan hibák, amelyek megakadályozzák a kód fordítását.
A fordítási hiba jó példája a hiányzó változó deklaráció:
További példák:
- For nélkül Következő
- Válassza a lehetőséget nélkül Vége Kiválasztás
- Ha nélkül Vége Ha
- Hívás a eljárás hogy nem létezik
A szintaktikai hibák (előző rész) a fordítási hibák részhalmaza.
Hibakeresés> Fordítás
Fordítási hibák jelennek meg, amikor egy eljárást próbál futtatni. Ideális esetben azonban a fordítási hibákat az eljárás futtatása előtt azonosítja.
Ezt úgy teheti meg, hogy idő előtt összeállítja a projektet. Ehhez lépjen a következőre: Hibakeresés> VBA projekt összeállítása.
A fordító „elmegy” az első hibához. Miután kijavította ezt a hibát, fordítsa újra a projektet. Ismételje meg mindaddig, amíg minden hiba kijavításra kerül.
Azt mondhatja, hogy minden hiba kijavítva, mert VBA projekt összeállítása szürkén jelenik meg:
OverFlow hiba
Az VBA OverFlow hiba akkor fordul elő, amikor egy értéket próbál beilleszteni egy túl nagy változóba. Például, Egész változók csak -32 768 és 32 768 közötti értékeket tartalmazhat. Ha nagyobb értéket ad meg, túlcsordulási hibaüzenetet kap:
Ehelyett a Hosszú változó a nagyobb szám tárolására.
Egyéb VBA hibakifejezések
VBA elkapási hiba
Más programozási nyelvekkel ellentétben a VBA -ban nincs Fogási nyilatkozat. Azonban a használatával megismételheti a fogási kimutatást Hiba esetén Folytassa a következőt és Ha Err.Number 0 Akkor. Ez a fentiekben található, a Hibakezelés az Err.Number segítségével.
VBA Hiba figyelmen kívül hagyása
A VBA hibáinak figyelmen kívül hagyásához egyszerűen használja a Hiba esetén Folytassa a következőt nyilatkozat:
1 | Hiba esetén Folytassa a következőt |
Azonban, mint fentebb említettük, óvatosan kell használni ezt az utasítást, mivel nem javítja a hibát, csak egyszerűen figyelmen kívül hagyja a hibát tartalmazó kód sort.
VBA dobási hiba / Err. Emelés
A VBA hiba elhárításához használja a Err. Emelje fel módszer.
Ez a kódsor növeli a „13” futásidejű hibát: A típus nem egyezik:
1 | Err. Emelés (13) |
VBA hibaelhárítás
VBA hibaelhárítás ez csak egy másik kifejezés a VBA hibakezelésre.
VBA hibaüzenet
A VBA hibaüzenet így néz ki:
A „Hibakeresés” gombra kattintva megjelenik a hibát kiváltó kódsor:
VBA hiba kezelése hurokban
A hurkokon belüli hibakezelés legjobb módja a használata Hiba esetén Folytassa a következőt együtt Hibás szám hiba észleléséhez (ne felejtse el használni Hiba. Világos hogy minden hiba után törölje a hibát).
Az alábbi példa két számot oszt el (A oszlop a B oszloppal), és az eredményt a C oszlopba adja ki. Ha hiba történik, az eredmény 0 lesz.
12345678910111213141516 | Rész teszt ()Homályos cella mint tartományHiba esetén Folytassa a következőtA tartomány minden cellájához ("a1: a10")'Állítsa be a cellaértéketcell.Offset (0, 2). Value = cell.Value / cell.Offset (0, 1). Value'Ha a Cell.Value hiba, akkor alapértelmezett értéke 0Ha Err.Number 0 Akkorcella. Eltolás (0, 2). Érték = 0Hiba. VilágosVége HaKövetkezőEnd Sub |
VBA hibakezelés az Access -ben
A fenti példák mindegyike pontosan ugyanúgy működik az Access VBA -ban, mint az Excel VBA -ban.
123456789101112131415161718 | Funkció DelRecord (frm As Form)'ez a funkció egy rekord törlésére szolgál egy táblázatban az űrlaprólOn Hiba GoTo endFrm -elHa .NewRecord Then.VisszaKilépés funkcióVége HaVége ezzelFrm.RecordsetClone segítségével.Könyvjelző = frm.Könyvjelző.Törölfrm.KérdezésVége ezzelKilépés funkcióbefejező:VégeVége funkció |