Egyéni függvények hibakeresése az Excelben

  • Ossza Meg Ezt
Michael Brown

Mivel már tudod, hogyan kell UDF-eket létrehozni (és remélem, kipróbáltad már az Excelben való alkalmazásukat), ássunk egy kicsit mélyebbre, és nézzük meg, mit lehet tenni abban az esetben, ha a felhasználó által definiált függvényed nem működik.

Az egyéni függvények létrehozásakor felmerülő problémák megoldásához valószínűleg szükséged lesz egy hibakeresésre. Ekkor megbizonyosodhatsz arról, hogy a függvény helyesen működik.

A következő hibakeresési technikákat fogjuk megvizsgálni:

    Amikor egyéni függvényt hoz létre, mindig fennáll annak a lehetősége, hogy hibát követ el. Az egyéni függvények általában meglehetősen összetettek. És nem mindig kezdenek azonnal helyesen működni. A képlet hibás eredményt vagy a #VALUE! hibát adhat vissza. A standard Excel-függvényekkel ellentétben nem lát más üzeneteket.

    Van rá mód, hogy lépésről lépésre végigmenjünk egy egyéni függvényen, hogy ellenőrizzük, hogyan működik az egyes utasítások? Persze! A hibakeresés erre szolgál.

    Az egyéni függvényed hibakeresésének több módját is felajánlom, hogy kiválaszthasd a számodra legmegfelelőbbet.

    Példaként használjuk az egyéni függvényt GetMaxBetween az egyik korábbi cikkünkből, amely kiszámítja a megadott értéktartományban a maximális számot:

    Function GetMaxBetween(rngCells As Range, MinNum, MaxNum) Dim NumRange As Range Dim vMax Dim arrNums() Dim i As Integer ReDim arrNums(rngCells.Count) For Each NumRange In rngCells vMax = NumRange Select Case vMax Case MinNum + 0.01 To MaxNum - 0.01 arrNums(i) = vMax i = i + 1 Case Else GetMaxBetween = 0 End Select Next NumRange GetMaxBetween = WorksheetFunction.Max(arrNums) End Function

    A függvény argumentumai a cellák tartománya, ahová a számok íródnak, valamint az értékek felső és alsó határa.

    Helyezze az MsgBox függvényt fontos helyekre

    A számítások végrehajtásának nyomon követése érdekében a legfontosabb változók értékeit a megfelelő helyeken megjelenítheti a képernyőn. Ezt felugró párbeszédpanelekkel teheti meg.

    MsgBox egy párbeszédpanel, amelyet arra használhat, hogy valamilyen üzenetet jelenítsen meg a felhasználónak.

    Az MsgBox szintaxisa hasonló a többi VBA-funkcióhoz:

    MsgBox(prompt [, gombok] [, title] [, helpfile, context])

    prompt kötelező argumentum. Ez tartalmazza a párbeszédpanelen megjelenő üzenetet. Használható az egyes változók értékeinek megjelenítésére is.

    Az összes többi argumentum opcionális.

    [ gombok ] - meghatározza, hogy mely gombok és ikonok jelenjenek meg a MsgBox Például, ha a vbOkOnly , akkor csak a OK gomb fog megjelenni. Még ha el is hagyta ezt az argumentumot, ez a gomb alapértelmezés szerint ezt a gombot fogja használni.

    [ cím ] - itt adhatja meg az üzenőmező címét.

    Váltsunk át a szavakról a gyakorlatra és kezdjük el a hibakeresést. Az üzenet megjelenítéséhez a következő sorral egészítsük ki a kódot a GetMaxBetween felhasználó által definiált függvényt a Másik eset operátor:

    MsgBox vMax,, "Count -" & i

    Az alábbi eredményt kapjuk:

    Function GetMaxBetween(rngCells As Range, MinNum, MaxNum) Dim NumRange As Range Dim vMax Dim arrNums() Dim i As Integer ReDim arrNums(rngCells.Count) For Each NumRange In rngCells vMax = NumRange Select Case vMax Case MinNum + 0.01 To MaxNum - 0.01 arrNums(i) = vMax i = i + 1 MsgBox vMax,, "Count -" & i Case Else GetMaxBetween = 0 End Select Next NumRange GetMaxBetween =WorksheetFunction.Max(arrNums) End Function

    A vMax változóval a párbeszédpanelen látni fogjuk, hogy mely számok felelnek meg a kiválasztási kritériumoknak, így közülük a legnagyobbat tudjuk kiválasztani. A címsorban a "Count -" & I kifejezéssel jelezzük, hogy hány számot választottunk már ki a maximális érték meghatározásához. A számláló minden egyes új értékkel növekszik majd.

    Ha megvan az UDF beállításunk, alkalmazzuk az alábbi képletet a dátumtartományra:

    = GetMaxBetween (A1:A6,10,50)

    Az Enter gomb megnyomása után az alábbi képernyőképen látható üzenet jelenik meg:

    Ez az első olyan szám az A1: A6 tartományban, amely megfelel a következő feltételeknek: 10-nél nagyobb, de 50-nél kisebb.

    Miután az OK gombra kattintott, megjelenik egy második üzenet a 14-es számmal. A többi szám nem felel meg a kiválasztási feltételeknek. Ezért a függvény kilép, és a két érték közül a legnagyobbat, a 17-et adja vissza.

    A MsgBox függvényt az egyéni függvényed legfontosabb helyein használhatod, hogy szabályozd, hogyan változnak az egyes változók értékei. Az üzenőmezők nagyon hasznosak lehetnek, ha egy nagy függvényed van és sok a számítás. Ebben az esetben könnyen meg tudod határozni, hogy a kód melyik részén lépett fel a hiba.

    Meghatározza a megállási pontokat és lépésről lépésre végezze el a feladatot.

    A függvényed kódjához töréspontokat adhatsz, ahol a kód végrehajtása megáll. Így lépésről lépésre követheted a számítási folyamatot. Ennek során láthatod, hogyan változnak a változók értékei.

    A megállási pont hozzáadásához helyezze a kurzort a szüneteltetni kívánt utasítást tartalmazó sorra. Ezután kattintson a jobb gombbal, és válassza a Debug -> Töréspont váltás vagy csak nyomja meg az F9 billentyűt . A funkciókódtól balra lévő függőleges szürke területen is kattinthat a kívánt helyre.

    Egy piros kör jelenik meg, ahogy az alábbi képernyőképen is látható. Pirossal van kiemelve az a kódsor, ahol a számítás leáll.

    Most a függvény futása közben megnyílik a VBA szerkesztőablak. A kurzor arra a pontra kerül, ahol megálltunk.

    Ha az egérkurzort a függvénykódban lévő változók bármelyike fölé viszi, láthatja azok aktuális értékét:

    A számítás folytatásához nyomja meg az F5 billentyűt.

    Megjegyzés. A töréspont után lépésről lépésre követheti a számítások előrehaladását. Ha megnyomja az F8 gombot, akkor a VBA kódnak csak egy következő sora fog végrehajtódni. A sárga, nyíllal jelölt vonal is az utolsó végrehajtott kódhelyre fog mozogni.

    Mivel a függvény végrehajtása ismét szünetel, az egérkurzor segítségével megtekintheti a függvény összes változójának aktuális értékét.

    Az F8 következő megnyomásával egy lépést lépünk előre. Tehát az F8-at a számítás végéig nyomhatjuk. Vagy az F5 megnyomásával folytathatjuk a számítást a következő töréspontig.

    Hiba esetén a kurzor megáll a kód azon pontján, ahol a hiba előfordult. És egy felugró hibaüzenet is megjelenik. Ez megkönnyíti a probléma okának meghatározását.

    A megadott töréspontok addig maradnak érvényben, amíg be nem zárja a fájlt. Amikor újra megnyitja, újra be kell állítania őket. Nem a legkényelmesebb módszer, nem gondolja?

    Ez a probléma azonban megoldható. Helyezzen be egy Stop utasítást a függvénykódba a szükséges pontokon, és ugyanúgy megállíthatja a program végrehajtását, mint a töréspontok használatakor.

    Amikor a VBA egy Stop utasítással megállítja a program végrehajtását, és vár a te műveletedre. Ellenőrizd a változók értékeit, majd nyomd meg az F5 billentyűt a folytatáshoz.

    Vagy nyomja meg az F8 billentyűt a funkció lépésről lépésre történő végrehajtásához a fent leírtak szerint.

    A Stop utasítás a program része, ezért nem törlődik, mint a töréspontok esetében. Ha befejezted a hibakeresést, távolítsd el magad. Vagy alakítsd át kommentárrá, ha egy szimpla idézőjelet (') teszel elé.

    Hibakeresés a Debug.Print operátor használatával

    Elhelyezheti a Debug.Print Ez hasznos a ciklikusan változó változók értékeinek ellenőrzésére.

    A Debug.Print teljesítményének példáját az alábbi képernyőképen láthatja.

    Nyilatkozat Debug.Print i, vMax kinyomtatja az értékeket és rendszámukat.

    Az Immediate ablakban két számot látunk (17 és 14) a kiválasztott tartományból, amely megfelel a beállított határértékeknek, és amelyek közül a maximumot választjuk ki. Az 1 és 2 számjegyek azt jelentik, hogy a függvény 2 ciklust végzett, amelyben a számok kiválasztásra kerültek. Látjuk a legfontosabb változók értékeit, ahogy korábban a következővel tettük MsgBox De ez nem állította le a funkciót.

    Egy függvény hívása egy eljárásból

    Egy felhasználó által definiált függvényt nem a munkalap egy cellájából, hanem egy eljárásból hívhat meg. Ebben az esetben az összes hiba megjelenik a Visual Basic szerkesztő ablakában.

    Az alábbi módon hívhatja meg a felhasználó által definiált GetMaxBerween függvényt egy eljárásból:

    Sub Test() Dim x x = GetMaxBetween(Range ( "A1:A6" ), 10, 50) MsgBox(x) End Sub

    Helyezze a kurzort a kód bármely pontjára, és nyomja meg az F5 billentyűt. Ha a függvényben nincs hiba, akkor egy felugró ablakban megjelenik a számítási eredmény.

    Hiba esetén a VBA-szerkesztőben megjelenik egy megfelelő üzenet. A számítás leáll, és sárga színnel kiemeli azt a kódsort, amelyben a hiba előfordult. Könnyen azonosíthatja, hogy hol és miért történt a hiba.

    Ennyi. Most már létrehozta saját kiegészítőjét, hozzáadta az Excelhez, és használhatja benne az UDF-et. Ha több UDF-et szeretne használni, csak írja meg a kódot a kiegészítő modulban a VBA-szerkesztőben, és mentse el.

    Ennyi volt mára. Az egyéni függvények hibakeresésének különböző módjait ismertettük, és megtanultuk, hogyan használhatod őket a munkafüzetedben. Nagyon reméljük, hogy hasznosnak találod ezeket az iránymutatásokat. Ha bármilyen kérdésed van, írd meg a cikkhez fűzött megjegyzésekben.

    Michael Brown elkötelezett technológiai rajongó, aki szenvedélyesen egyszerűsíti a bonyolult folyamatokat szoftvereszközök segítségével. A technológiai iparban szerzett több mint egy évtizedes tapasztalatával a Microsoft Excel és az Outlook, valamint a Google Táblázatok és a Dokumentumok területén fejlesztette tudását. Michael blogja célja, hogy megossza tudását és szakértelmét másokkal, könnyen követhető tippeket és oktatóanyagokat adva a termelékenység és a hatékonyság javításához. Akár tapasztalt szakember, akár kezdő, Michael blogja értékes betekintést és gyakorlati tanácsokat kínál, amelyek segítségével a legtöbbet hozhatja ki ezekből az alapvető szoftvereszközökből.