Lær hvordan du feilsøker egendefinerte funksjoner i Excel

  • Dele Denne
Michael Brown

Som du allerede vet hvordan du lager UDF-er (og jeg håper du også har prøvd å bruke dem i Excel), la oss grave litt dypere og se hva som kan gjøres i tilfelle den brukerdefinerte funksjonen din ikke fungerer.

For å løse noen problemer når du oppretter en egendefinert funksjon, må du mest sannsynlig kjøre en feilsøking. Da kan du være sikker på at funksjonen fungerer som den skal.

Vi vil utforske følgende feilsøkingsteknikker:

    Når du oppretter en tilpasset funksjon, er det alltid en mulighet at du vil gjøre en feil. Egendefinerte funksjoner er vanligvis ganske komplekse. Og de begynner ikke alltid å fungere riktig med en gang. Formelen kan returnere et feil resultat eller #VALUE! feil. I motsetning til standard Excel-funksjoner, vil du ikke se noen andre meldinger.

    Er det en måte å gå gjennom en tilpasset funksjon trinn for trinn for å sjekke hvordan hver av setningene fungerer? Sikker! Feilsøking brukes til dette.

    Jeg vil tilby deg flere måter å feilsøke din egendefinerte funksjon slik at du kan velge den som fungerer for deg.

    Som et eksempel bruker vi den tilpassede funksjonen GetMaxBetween fra en av våre tidligere artikler som beregner det maksimale antallet i det angitte verdiområdet:

    Funksjon GetMaxBetween(rngCells As Range, MinNum, MaxNum) Dim NumRange As Range Dim vMax Dim arrNums() Dim i Som heltall ReDim arrNums(rngCells.Count) For hvert tallområde i rngCells vMax =NumRange Velg Case vMax Case MinNum + 0,01 To MaxNum - 0,01 arrNums(i) = vMax i = i + 1 Case Else GetMaxBetween = 0 End Velg Neste NumRange GetMaxBetween = WorksheetFunction.Max(Endfunksjonen argumentet

    ) celleområde der tall skrives, samt øvre og nedre grense for verdier.

    Plasser MsgBox-funksjonen på viktige steder

    For å overvåke utførelsen av beregninger, kan du vise verdiene til de viktigste variablene på skjermen på de riktige stedene. Dette kan gjøres ved hjelp av popup-dialogbokser.

    MsgBox er en dialogboks som du kan bruke til å vise en slags melding til brukeren.

    MsgBox sin syntaks ligner på andre VBA-funksjoner:

    MsgBox(prompt [, knapper] [, tittel] [, hjelpefil, kontekst])

    prompt er et nødvendig argument. Den inneholder meldingen du ser i dialogboksen. Den kan også brukes til å vise verdiene til individuelle variabler.

    Alle de andre argumentene er valgfrie.

    [ knapper ] - bestemmer hvilke knapper og ikoner som er vises i MsgBox . For eksempel, hvis vi bruker alternativet vbOkOnly , vil bare OK -knappen vises. Selv om du gikk glipp av dette argumentet, brukes denne knappen som standard.

    [ tittel ] - her kan du spesifisere tittelen på meldingsboksen.

    La oss bytte fra ord å øve på og begynne å feilsøke. For å visemeldingen, legg til følgende linje i koden til GetMaxBetween brukerdefinerte funksjon før Case Else -operatoren:

    MsgBox vMax,, "Count -" & i

    Her er hva vi får i resultatet:

    Funksjon GetMaxBetween(rngCells As Range, MinNum, MaxNum) Dim NumRange As Range Dim vMax Dim arrNums() Dim i As Integer ReDim arrNums(rngCells.Count) For hvert NumRange In rngCells vMax = NumRange Velg 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

    Ved å bruke vMax -variabelen i dialogboksen vil vi se hvilke tall som oppfyller kriteriene for valg, så at vi kan velge den største av dem. Med uttrykket "Tell -" & I tittellinjen angir vi hvor mange tall vi allerede har valgt for å bestemme maksimalverdien. Telleren vil økes med hver ny verdi.

    Når vi har UDF-settet vårt, bruker vi formelen nedenfor på datointervallet:

    = GetMaxBetween (A1:A6,10,50)

    Etter Enter-knappen trykkes, vil du se en melding som på skjermbildet nedenfor:

    Dette er det første tallet i området A1: A6 som oppfyller kriteriene: større enn 10 men mindre enn 50.

    Etter at du har klikket OK, vises en ny melding med tallet 14. Resten av tallene samsvarer ikke med valgetkriterier. Derfor går funksjonen ut og returnerer den største av de to verdiene, 17.

    MsgBox -funksjonen kan brukes på de viktigste stedene i din egendefinerte funksjon for å kontrollere hvordan verdiene av individuelle variabler endres. Meldingsbokser kan være veldig nyttige når du har en stor funksjon og mye beregning. I dette tilfellet vil det være enkelt for deg å finne ut i hvilken del av koden feilen oppstår.

    Fast ut stopppunkter og utfør trinn for trinn

    Du kan legge til bruddpunkter i koden til funksjonen din der kjøringen av kode vil stoppe. Så du kan følge beregningsprosessen trinn for trinn. Ved å gjøre det kan du se hvordan verdiene til variablene endres.

    For å legge til et bruddpunkt, plasser markøren på linjen som inneholder setningen der du velger å pause. Høyreklikk deretter og velg Debug -> Veksle mellom Breakpoint eller bare trykk F9 . Du kan også klikke på ønsket sted på det vertikale grå området til venstre for funksjonskoden.

    En rød sirkel vil dukke opp, som du kan se på skjermbildet nedenfor. Kodelinjen der beregningen skal stoppes er uthevet i rødt.

    Nå åpnes VBA-redigeringsvinduet når funksjonen kjører. Markøren vil bli plassert på punktet der du stoppet.

    Hvis du holder musepekeren over noen av variablene i funksjonskoden, kan du se deres gjeldendeverdi:

    Trykk F5 for å fortsette beregningen.

    Merk. Etter bruddpunktet kan du begynne å spore fremdriften til beregningene trinn for trinn. Hvis du trykker på F8-knappen, vil bare én neste linje i VBA-koden bli utført. Den gule linjen med en pil vil også flytte til den sist utførte kodeposisjonen.

    Siden utførelsen av funksjonen er satt på pause igjen, kan du se gjeldende verdier for alle variablene til funksjonen ved å bruke musepekeren.

    Neste trykk på F8 vil ta oss ett skritt fremover . Så du kan trykke F8 til slutten av beregningen. Eller trykk på F5 for å fortsette beregningen til neste bruddpunkt.

    Hvis det oppstår en feil, vil markøren bli stoppet på punktet i koden der feilen oppstod. Og du vil også se en popup-feilmelding. Dette gjør det enkelt å finne årsaken til problemet.

    Krytepunktene du angir vil bli brukt til du lukker filen. Når du åpner den på nytt, må du angi dem på nytt. Ikke den mest praktiske metoden, tror du ikke?

    Men dette problemet kan løses. Sett inn en Stop -setning i funksjonskoden på de nødvendige punktene, og du kan stoppe programkjøringen på samme måte som ved bruk av bruddpunkter.

    Når VBA møter en Stopp -setning, vil den stoppe programkjøringen og vente på handlingen din. Sjekk verdiene til variablene, datrykk F5 for å fortsette.

    Eller trykk F8 for å utføre funksjonen trinn-for-trinn som beskrevet ovenfor.

    Stopp -setningen er en del av programmet og er derfor ikke slettet, slik tilfellet er med et bruddpunkt. Når du er ferdig med feilsøkingen, fjern den selv. Eller gjør den til en kommentar ved å sette den foran med et enkelt anførselstegn (').

    Feilsøking ved hjelp av Debug.Print-operatoren

    Du kan plassere Debug.Print i funksjonskoden på rett plass. Dette er nyttig for å sjekke verdiene til variabler som endrer seg syklisk.

    Du kan se et eksempel på Debug.Prints ytelse på skjermbildet nedenfor.

    Statement Debug.Print i, vMax skriver ut verdier og deres ordinære tall.

    I Umiddelbart-vinduet ser du to tall (17 og 14) fra det valgte området, som tilsvarer angi grenser og blant hvilke maksimum vil bli valgt. Siffer 1 og 2 betyr at funksjonen har fullført 2 sykluser der tallene ble valgt. Vi ser verdiene til de viktigste variablene, som vi gjorde tidligere med MsgBox . Men dette stoppet ikke funksjonen.

    Kall en funksjon fra en prosedyre

    Du kan kalle en brukerdefinert funksjon ikke fra en celle i regnearket, men fra en prosedyre. I dette tilfellet vil alle feil vises i Visual Basic Editor-vinduet.

    Slik kan du kalle opp den brukerdefinerte funksjonen GetMaxBerween fra enprosedyre:

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

    Plasser markøren hvor som helst i koden og trykk F5 . Hvis det ikke er noen feil i funksjonen, vil du se et popup-vindu med beregningsresultatet.

    Ved feil vil du se en tilsvarende melding i VBA-editoren. Beregningen vil bli stoppet og kodelinjen der feilen oppstod vil bli uthevet i gult. Du kan enkelt identifisere hvor og hvorfor feilen oppsto.

    Det er alt. Nå har du laget ditt eget tillegg, lagt det til Excel og du kan bruke UDF i det. Hvis du vil bruke flere UDF-er, er det bare å skrive koden i tilleggsmodulen i VBA-editoren og lagre den.

    Det var det for i dag. Vi har dekket ulike måter å feilsøke egendefinerte funksjoner på og lært hvordan du bruker dem i arbeidsboken din. Vi håper virkelig at du finner disse retningslinjene nyttige. Hvis du har spørsmål, skriv i kommentarfeltet til denne artikkelen.

    Michael Brown er en dedikert teknologientusiast med en lidenskap for å forenkle komplekse prosesser ved hjelp av programvareverktøy. Med mer enn ti års erfaring i teknologibransjen, har han forbedret ferdighetene sine i Microsoft Excel og Outlook, samt Google Sheets og Docs. Michaels blogg er dedikert til å dele sin kunnskap og ekspertise med andre, og gir enkle å følge tips og veiledninger for å forbedre produktivitet og effektivitet. Enten du er en erfaren profesjonell eller nybegynner, tilbyr Michaels blogg verdifull innsikt og praktiske råd for å få mest mulig ut av disse viktige programvareverktøyene.