Du kan få problemer med VBA-koden din, men hvordan finner du problemet? Noen ganger kan det hende at VBA-koden din trenger litt feilsøking. Fortsett å lese for å oppdage de fire vanligste metodene for feilsøking av Excel VBA-kode:
-
Undersøker koden
-
Sette inn MsgBox-funksjoner på forskjellige steder i koden din
-
Setter inn Debug.Print-setninger
-
Bruke de innebygde feilsøkingsverktøyene i Excel
Undersøker koden din
Den kanskje enkleste feilsøkingsteknikken er ganske enkelt å ta en nærmere titt på koden din for å se om du kan finne problemet. Denne metoden krever selvfølgelig kunnskap og erfaring. Med andre ord, du må vite hva du gjør. Hvis du er heldig, hopper feilen rett ut, og du slår deg i pannen og sier: "Åh!" Når pannesmertene avtar, kan du fikse problemet.
Legg merke til bruken av ordene "Hvis du er heldig." Det er fordi du ofte oppdager feil når du har jobbet med programmet i åtte timer i strekk, klokken er 02.00 og du kjører på koffein og viljestyrke. Til tider som det er du heldig hvis du til og med kan se koden din, enn si finne feilene. Vær derfor ikke overrasket om det å undersøke koden din ikke er nok til å få deg til å finne og fjerne alle feilene den inneholder.
Bruke MsgBox-funksjonen
Et vanlig problem i mange programmer innebærer at en eller flere variabler ikke får de verdiene du forventer. I slike tilfeller er overvåking av variabelen(e) mens koden kjører en nyttig feilsøkingsteknikk. En måte å gjøre dette på er ved å sette inn midlertidige MsgBox-funksjoner i rutinen din. For eksempel, hvis du har en variabel kalt CellCount, kan du sette inn følgende setning:
MsgBox CellCount
Når du utfører rutinen, viser MsgBox-funksjonen CellCounts verdi.
Det er ofte nyttig å vise verdiene til to eller flere variabler i meldingsboksen. Følgende setning viser gjeldende verdi av to variabler: LoopIndex (1) og CellCount (72), atskilt med et mellomrom.
MsgBox LoopIndex & " " & CellCount
Legg merke til at de to variablene er kombinert med sammenkoblingsoperatoren (&) og sett inn et mellomrom mellom dem. Ellers setter meldingsboksen de to verdiene sammen, slik at de ser ut som én enkelt verdi. Du kan også bruke den innebygde konstanten, vbNewLine, i stedet for mellomromstegnet. vbNewLine setter inn et linjeskift, som viser teksten på en ny linje. Følgende setning viser tre variabler, hver på en egen linje:
Bruke en meldingsboks for å vise verdien av tre variabler.
MsgBox LoopIndex & vbNewLine & CellCount & vbNewLine & MyVal
Denne teknikken er ikke begrenset til overvåking av variabler. Du kan bruke en meldingsboks til å vise all slags nyttig informasjon mens koden kjører. For eksempel, hvis koden din går gjennom en serie ark, viser følgende setning navnet og typen på det aktive arket:
MsgBox ActiveSheet.Name & “ “ & TypeName(ActiveSheet)
Hvis meldingsboksen viser noe uventet, trykk Ctrl+Break, og du ser en dialogboks som forteller deg at kjøringen av kode har blitt avbrutt, har du fire valg:
-
Klikk på Fortsett-knappen. Koden fortsetter å kjøre.
-
Klikk på Avslutt-knappen. Utførelse stopper.
-
Klikk på Feilsøk-knappen. VBE går inn i feilsøkingsmodus.
-
Klikk på Hjelp-knappen. En hjelpeskjerm forteller deg at du trykket Ctrl+Break. Det er med andre ord ikke særlig nyttig.
Ved å trykke Ctrl+Break stopper kjøringen av koden din og gir deg noen valg.
Hvis tastaturet ditt ikke har en brytetast, kan du prøve å trykke Ctrl+ScrollLock.
Bruk gjerne MsgBox-funksjonene ofte når du feilsøker koden din. Bare sørg for at du fjerner dem etter at du har identifisert og rettet problemet.
Setter inn Debug.Print-setninger
Som et alternativ til å bruke MsgBox-funksjoner i koden din, kan du sette inn en eller flere midlertidige Debug.Print-setninger. Bruk disse setningene til å skrive ut verdien av én eller flere variabler i vinduet Umiddelbart. Her er et eksempel som viser verdiene til tre variabler:
Debug.Print LoopIndex, CellCount, MyVal
Legg merke til at variablene er atskilt med komma. Du kan vise så mange variabler du vil med en enkelt Debug.Print-setning.
Debug.Print sender utdata til Immediate-vinduet selv om det vinduet er skjult. Hvis VBEs Umiddelbare vindu ikke er synlig, trykk Ctrl+G (eller velg Vis → Umiddelbart vindu). Her er noen utdata i Umiddelbar-vinduet.
En Debug.Print-setning sender utdata til Immediate-vinduet.
I motsetning til MsgBox, stopper ikke Debug.Print-setninger koden din. Så du må holde øye med Umiddelbar-vinduet for å se hva som skjer.
Etter at du har feilsøkt koden, sørg for å fjerne alle Debug.Print-setningene. Selv store selskaper som Microsoft glemmer av og til å fjerne sine Debug.Print-uttalelser. I flere tidligere versjoner av Excel, hver gang Analysis ToolPak-tillegget ble åpnet, ville du se flere merkelige meldinger i Umiddelbar-vinduet. Det problemet ble endelig løst i Excel 2007.
Bruker VBA debugger
Excel-designerne er godt kjent med konseptet med feil. Følgelig inkluderer Excel et sett med feilsøkingsverktøy som kan hjelpe deg med å rette opp problemer i VBA-koden.