Tartalomjegyzék
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 FunctionA 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 -" & iAz 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 FunctionA 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 SubHelyezze 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.