Lær at fejlfinde brugerdefinerede funktioner i Excel

  • Del Dette
Michael Brown

Da du allerede ved, hvordan du opretter UDF'er (og forhåbentlig har du også prøvet at anvende dem i Excel), skal vi grave lidt dybere og se, hvad du kan gøre, hvis din brugerdefinerede funktion ikke fungerer.

For at løse nogle problemer, når du opretter en brugerdefineret funktion, skal du sandsynligvis køre en fejlfinding. Så kan du være sikker på, at funktionen fungerer korrekt.

Vi vil undersøge følgende fejlfindingsteknikker:

    Når du opretter en brugerdefineret funktion, er der altid en mulighed for, at du begår en fejl. Brugerdefinerede funktioner er normalt ret komplekse. Og de begynder ikke altid at fungere korrekt med det samme. Formlen kan returnere et forkert resultat eller fejlen #VALUE!. I modsætning til standard Excel-funktioner vil du ikke se andre meddelelser.

    Er der en måde at gennemgå en brugerdefineret funktion trin for trin for at kontrollere, hvordan hvert enkelt af dens statements fungerer? Selvfølgelig! Debugging bruges til dette.

    Jeg vil tilbyde dig flere måder at fejlfinde din brugerdefinerede funktion på, så du kan vælge den, der passer dig bedst.

    Som et eksempel bruger vi den brugerdefinerede funktion GetMaxBetween fra en af vores tidligere artikler, som beregner det maksimale tal i det angivne interval af værdier:

    Funktion GetMaxBetween(rngCells As Range, MinNum, MaxNum) Dim NumRange As Range Dim vMax 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

    Funktionsargumenterne er det område af celler, hvor tallene skrives, samt den øvre og nedre grænse for værdierne.

    Placer MsgBox-funktionen på vigtige steder

    For at overvåge udførelsen af beregninger kan du vise værdierne for de vigtigste variabler på skærmen på de rigtige steder. Dette kan gøres ved hjælp af popup-dialogbokse.

    MsgBox er en dialogboks, som du kan bruge til at vise en eller anden form for besked til brugeren.

    Syntaksen for MsgBox svarer til andre VBA-funktioner:

    MsgBox(prompt [, knapper] [, titel] [, helpfile, kontekst])

    prompt er et påkrævet argument. Det indeholder den meddelelse, som du ser i dialogboksen. Det kan også bruges til at vise værdierne for individuelle variabler.

    Alle de andre argumenter er valgfrie.

    [ knapper ] - bestemmer, hvilke knapper og ikoner der skal vises i MsgBox Hvis vi f.eks. bruger indstillingen vbOkOnly , så er det kun den OK Selv hvis du har glemt at angive dette argument, anvendes denne knap som standard.

    [ titel ] - her kan du angive titlen på meddelelsesboksen.

    Lad os skifte fra ord til praksis og begynde at fejlfinde. For at vise meddelelsen skal du tilføje følgende linje til koden i GetMaxBetween brugerdefinerede funktion før den Case Else operatør:

    MsgBox vMax,,, "Antal -" & i

    Her er, hvad vi får i resultatet:

    Funktion GetMaxBetween(rngCells As Range, MinNum, MaxNum) Dim NumRange As Range Dim vMax 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

    Brug af den vMax variabel i dialogboksen vil vi se, hvilke tal der opfylder kriterierne for udvælgelse, så vi kan vælge det største af dem. Med udtrykket "Count -" & I i titellinjen angiver vi, hvor mange tal vi allerede har valgt for at bestemme den maksimale værdi. Tælleren vil blive forøget med hver ny værdi.

    Når vi har indstillet vores UDF, anvender vi nedenstående formel på datointervallet:

    = GetMaxBetween (A1:A6,10,50)

    Når du har trykket på Enter-knappen, vises en meddelelse som i skærmbilledet nedenfor:

    Dette er det første tal i intervallet A1: A6, der opfylder kriterierne: større end 10, men mindre end 50.

    Når du klikker på OK, vises en anden meddelelse med tallet 14. Resten af tallene passer ikke til udvælgelseskriterierne. Derfor afsluttes funktionen og returnerer den største af de to værdier, 17.

    MsgBox funktionen kan bruges de vigtigste steder i din brugerdefinerede funktion til at styre, hvordan værdierne for de enkelte variabler ændres. Meddelelsesbokse kan være meget nyttige, når du har en stor funktion og mange beregninger. I dette tilfælde vil det være let for dig at afgøre, i hvilken del af koden fejlen opstår.

    Bestem stoppunkter og udfør trin for trin

    Du kan tilføje breakpoints til koden i din funktion, hvor kodekørslen stopper. På den måde kan du følge beregningsprocessen trin for trin. På den måde kan du se, hvordan værdierne af variablerne ændres.

    Hvis du vil tilføje et afbrydelsespunkt, skal du placere markøren på den linje, der indeholder den erklæring, hvor du ønsker at holde en pause. Højreklik derefter og vælg Debug -> Slå pausepunkt fra Du kan også klikke på det ønskede sted på det lodrette grå område til venstre for funktionskoden.

    Der vises en rød cirkel, som du kan se på skærmbilledet nedenfor. Den kodelinje, hvor beregningen stoppes, er markeret med rødt.

    Nu åbnes VBA-redigeringsvinduet, når funktionen kører, og markøren placeres på det sted, hvor du stoppede.

    Hvis du holder musemarkøren over en af variablerne i funktionskoden, kan du se deres aktuelle værdi:

    Tryk på F5 for at fortsætte beregningen.

    Bemærk. Efter breakpointet kan du begynde at følge fremdriften af beregningerne trin for trin. Hvis du trykker på knappen F8, vil kun den næste linje af VBA-koden blive udført. Den gule linje med en pil vil også flytte sig til den sidst udførte kodeposition.

    Da udførelsen af funktionen igen er sat på pause, kan du se de aktuelle værdier for alle funktionens variabler ved hjælp af musemarkøren.

    Det næste tryk på F8 bringer os et skridt fremad. Du kan altså trykke på F8 indtil beregningen er afsluttet. Eller du kan trykke på F5 for at fortsætte beregningen indtil det næste breakpoint.

    Hvis der opstår en fejl, stoppes markøren på det sted i koden, hvor fejlen opstod. Du får også vist en pop-up fejlmeddelelse. Dette gør det nemt at finde årsagen til problemet.

    De breakpoints, du angiver, vil blive anvendt, indtil du lukker filen. Når du åbner den igen, skal du indstille dem igen. Ikke den mest praktiske metode, synes du ikke?

    Dette problem kan dog løses. Indsæt en Stop i funktionskoden på de nødvendige steder, og du kan stoppe programmets udførelse på samme måde som ved brug af breakpoints.

    Når VBA støder på en Stop Statement, stopper den programmets udførelse og venter på din handling. Kontroller værdierne for variablerne, og tryk derefter på F5 for at fortsætte.

    Eller tryk på F8 for at udføre funktionen trin for trin som beskrevet ovenfor.

    Stop er en del af programmet og bliver derfor ikke slettet, som det er tilfældet med et breakpoint. Når du er færdig med fejlsøgningen, kan du selv fjerne det. Eller du kan gøre det til en kommentar ved at sætte et enkelt citationstegn (') foran det.

    Fejlfinding ved hjælp af operatoren Debug.Print

    Du kan placere den Debug.Print i funktionskoden på det rigtige sted. Dette er nyttigt til at kontrollere værdierne for variabler, der ændrer sig cyklisk.

    Du kan se et eksempel på Debug.Print's ydeevne på skærmbilledet nedenfor.

    Erklæring Debug.Print i, vMax udskriver værdier og deres ordinalnumre.

    I vinduet Immediate vises to tal (17 og 14) fra det valgte område, som svarer til de indstillede grænser, og blandt hvilke maksimum vil blive valgt. Cifrene 1 og 2 betyder, at funktionen har gennemført 2 cyklusser, hvor tallene blev valgt. Vi ser værdierne af de vigtigste variabler, som vi gjorde tidligere med MsgBox Men det stoppede ikke funktionen.

    Kald en funktion fra en procedure

    Du kan kalde en brugerdefineret funktion ikke fra en celle i regnearket, men fra en procedure. I dette tilfælde vil alle fejl blive vist i Visual Basic Editor-vinduet.

    Sådan kan du kalde den brugerdefinerede funktion GetMaxBerween fra en procedure:

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

    Placér markøren et vilkårligt sted i koden, og tryk på F5 . Hvis der ikke er nogen fejl i funktionen, vises et pop-up-vindue med beregningsresultatet.

    Hvis der opstår en fejl, vises en tilsvarende meddelelse i VBA-editoren. Beregningen stoppes, og den kodelinje, hvor fejlen opstod, markeres med gul farve. Du kan nemt identificere, hvor og hvorfor fejlen opstod.

    Det er alt. Nu har du oprettet dit eget tilføjelsesmodul, tilføjet det til Excel og kan bruge UDF'en i det. Hvis du vil bruge flere UDF'er, skal du blot skrive koden i tilføjelsesmodulet i VBA-editoren og gemme den.

    Det var det hele for i dag. Vi har gennemgået forskellige måder at fejlfinde brugerdefinerede funktioner på og lært, hvordan du bruger dem i din projektmappe. Vi håber virkelig, at du finder disse retningslinjer nyttige. Hvis du har spørgsmål, kan du skrive i kommentarerne til denne artikel.

    Michael Brown er en dedikeret teknologientusiast med en passion for at forenkle komplekse processer ved hjælp af softwareværktøjer. Med mere end ti års erfaring i teknologibranchen har han finpudset sine færdigheder i Microsoft Excel og Outlook samt Google Sheets og Docs. Michaels blog er dedikeret til at dele sin viden og ekspertise med andre og giver nemme at følge tips og vejledninger til at forbedre produktiviteten og effektiviteten. Uanset om du er en erfaren professionel eller nybegynder, tilbyder Michaels blog værdifuld indsigt og praktiske råd til at få mest muligt ud af disse vigtige softwareværktøjer.