Catching hibák és hibakereső kód VBA, Excel valamennyi

Nagyon gyakran a munka megkezdése VBA arc különböző hibák kiadja a kódot futás közben. Ha nem tudja, mi a teendő ebben az esetben - ez nagyon nehéz lesz kijavítani a kódot gyorsan, és néha még lehetetlen meghatározni a hiba okát, segítség nélkül a „fejlettebb” felhasználók. A kezdők gyakran véletlenszerűen változik, hogy adhat okot az egyéb hibákat, és ez viszont megnehezíti nem csak megtalálni az eredeti hiba, hanem vezethet a képtelenség, hogy rögzítse a kódot egyáltalán. Ezért ebben a cikkben úgy döntöttem, hogy leírja, hogyan kell előállítani hibakeresés és azonosítani a hibákat.
Ez le van írva a cikkben lehet azonnal tesztelni a gyakorlatban, a tanács letölteni egy példa:

Amint lesz szó:

Ezen túlmenően, a végén a cikket, akkor letölt egy fájlt a VBA hibakódok és jelentésük.

a kezdeti adatok
Tegyük fel, hogy van egy egyszerű táblázatot

És a kódot, amely kerül sor minden sorban, szorozzuk meg az (ár oszlop) száma (oszlop Sales elem), sum szorozni adatokat és kiírja az eredményül kapott összeget cellában B17:

Az arca a kód most helyesen végrehajtani, és a hiba okát nem. Azonban, ha meg kell csinálni újra, hibaüzenetet kap - ezúttal hiba adattípusok (típus Hibás):

Abban az időben a megjelenése a fő sajtó Debug. nem ér véget (ha van egy vágy, hogy olvassa el a típusú hiba többet - akkor is kattintson a Súgó, a szöveg angol nyelven). VBA sárga kiemelés vonal számítás vagy művelet, amely okozza a hibát:

Most a legfontosabb lépés - szükség van, hogy meghatározzák az oka a hiba. A felszínen minden rendben van - az egyik cellában kell szorozni egy másik. Anélkül, hogy a tapasztalat nehéz rögtön megérti, hogy ez a hiba az adattípusok, akkor is, ha VBA csak beszélünk róla (típus Hibás - fordítva „Type mismatch”). Ezért a legmegbízhatóbb ebben az esetben - annak meghatározása, hogy az érték az egyes eleme a vonal, ahol a hiba történt. Abban az esetben, a fenti kódot, akkor a két módszer:

A Windows helyiek és órák
Csak azért, hogy nyomon követheti a változók értékei nagyon kényelmes használni a helyiek ablakot, és órák ablakot.
A helyiek ablakban
A helyiek ablakban helyi bevont változók az aktuálisan futó eljárás:

Mint látható ebben az ablakban mutatja a változó nevét, típusát és értékét. Minden rendben van, de ebben az ablakban csak a helyi deklarált változók a modul szintjén. Változók más modulok bejelentett nyilvános, és használják a jelenlegi eljárásban ott nem jelennek meg. Tudjon meg többet a láthatóságát változók megtalálható a cikk: Mi az a változó, és hogyan kell bejelenteni, nem?

Órák ablakban
Órák ablak nagy érték - ebben az ablakban, akkor egyszerűen „drag and drop” a kívánt változót vagy objektumot, és az összes adatot a név tükröződni fog az ablakon a változó típusát és az aktuális értéket:

Most nézzük meg egy kicsit több, mint a drag and drop adatokat az ablakba. A kód a fenti példában:

  • Sejtek kiválasztására (i, 3) .Value
  • Még kiválasztott mozog az egeret ez a választás
  • Tartsa a bal egérgombot, és anélkül, hogy engedje el a kurzort bárhol a Órák ablakban
  • Breack Aztán érték változása. Ha be van állítva, a VBA fogja követni a változó értékeit, és megáll a kódot bármilyen változás a változó értékét. Ez hasznos nyomkövető értékek ciklusok
  • Breack Aztán érték igaz - tétel hasznos típusú változók logikai vagy logikai kifejezéseket. Miután a változó vagy a kifejezés eredményét veszi True - a kód leáll ezen a vonalon.
    Például a kódot kell állítani, ha a sorszám egyenlő 10 (azaz. Lr változó lesz beállítva 10). Ezután a kifejezés fog kinézni:


Aztán szükség lesz kiosztani a sorban Ha lr = 10 Akkor nagyon feltételes kifejezés lr = 10. Órák mozgassa az ablakban. Jelölje ki az órák ablak, ezt a kifejezést, nyomja meg a jobb egérgombbal, és válassza a Szerkesztés Watch. Válassza Breack Aztán érték igaz mezőbe. Most, amint a változó lr eléri a 10 (azaz a feldolgozott lesz a 10. sorban az asztalra.) - a kód leáll, és a húr kifejezést sárga színnel. Lehetőség lesz elemezni más változók vagy továbbra kódfuttatásra lépésben módban (lásd alább).

Mert mi szükség lehet?

  • Ahhoz, hogy elemezni mások kódot, és megérteni, pontosabban, hogy mit csinál a belsejében, és nem csak az eredmények a végrehajtás
  • Ha egy kezdő programozó, és gyakran használják makrorekorder (felvétel makrók) - körökre osztott hibakereső segít megérteni, hogy a kereset végrehajtja minden sorban. Ez segít, hogy gyorsan megtanulják, hogy megértsék a kódot, és távolítsa el belőle túl sokat, valamint, hogy összekapcsolják a különböző kódokat
  • Ha a kód végrehajtását logikai hiba. Ez talán a legnehezebb hiba, mert ebben az esetben a VBA nem hagyja abba a munkát, és nem azt a hibát. A kód fut hiba nélkül, de az eredmény nem ugyanaz, mint várták. Ez azt jelenti, hogy egy adott változó kap a rossz érték, vagy valamilyen feltétel helytelenül vagy nem hajtja végre az idő, amikor kellene. Általánosságban elmondható, hogy valójában ez a fejlesztő hiba, amely elvezet a szintaktikai hiba vagy típusok VBA nyomon követhető.

Hogyan-lépéses hibakeresést? Ez egyszerű: állítsa a kurzort a kódot, és nyomja meg az F8 billentyűt (vagy válassza Degub -Step Into menü). Most, amikor a gomb megnyomása F8 kódot végrehajtani egy kódot sor a másik után a sorrendben, amelyben található az eljárást. Ha belül az eljárás meg fogja hívni a második eljárás vagy függvény - átléphető kódot, és végrehajtja azt, majd visszatér a fő eljárás.
Csak azt, hogy egy pár gyorsbillentyűk, amelyek könnyen használható lépésről lépésre hibakeresés:

töréspontok
De sokkal gyakrabban egyszerűen nincs az összes kódot, hogy lépésről lépésre, és indítsa lépve most kezdődik el egy sorban, hogy ne zárja a sorokat a kód 40 (és még ciklus) annak érdekében, hogy egy bizonyos vonalat. Egy másik töréspont nagyon hasznosak a hibakeresés esetén eljárások (mint a Worksheet_Change, Worksheet_BeforeDoubleClick, események alkotnak elemek, stb), mint többnyire tartalmaznak érveket, és végre saját F8 egyszerűen lehetetlen, és ők végzik csak bekövetkeztével az esetben, ha úgy tervezték, hogy kezelni.
VBA világossá tenni, milyen irányvonalat kell megállítani, telepíteni kell az egér kurzort a kívánt vonalat, és nyomja meg az F9 vagy Debug -Toggle Breackpoint. Vonal lesz kiemelve sötétvörös.
Úgy is hívják beállítás töréspontok. Távolítsuk el a töréspont lehet ugyanaz, mint volt telepítve - F9 vagy Debug -Toggle Breackpoint. Csak pont az alapja lehet beállítani az egér segítségével: szükség van a területen, hogy az az ablak bal kóddal előtt a kívánt sort, ha rákattint az egér bal gombját:

Most lehet futtatni a kódot bármilyen kényelmes módon (hibakereső többnyire az F5 billentyűt, vagy panel: Run -Run Sub / UserForm). Ha a kód eléri a megadott töréspont leáll, és a sort sárga színnel. Akkor sem folytatja a lépésről lépésre (megnyomásával F8). vagy (ellenőrizze az értéket a vonatkozó változók és objektumok), nyomja meg az F5 újra, és a kód továbbra is működni fog automatikusan hacsak teljesített vagy elér egy másik töréspont. Magukat a töréspontok bármilyen szám lehet, és ezek lehetnek bármilyen eljárás vagy függvény.
Emlékeztetni kell arra, hogy miután a az ügy lezárása kóddal töréspontok nem kerülnek mentésre, és a következő alkalommal megnyitja a munkafüzetet is kell telepíteni, ha szükséges.

Nincsenek hibák, de a kód még mindig nem elégedett
Azt is szeretném hozzátenni, hogy a hibák nem mindig jelennek meg, akkor is, ha vannak. Az is előfordul, hogy a kód fut hiba nélkül, de ennek ellenére végre vagy sem, vagy nem csinál semmit. Általában két oka van: