Du kan løbe ind i nogle problemer med din VBA-kode, men hvordan finder du problemet? Nogle gange kan din VBA-kode have brug for noget fejlretning. Fortsæt med at læse for at opdage de fire mest almindelige metoder til fejlretning af Excel VBA-kode:
-
Undersøgelse af koden
-
Indsættelse af MsgBox-funktioner på forskellige steder i din kode
-
Indsættelse af Debug.Print-sætninger
-
Brug af de indbyggede Excel-fejlretningsværktøjer
Undersøgelse af din kode
Den måske mest ligetil debugging-teknik er simpelthen at tage et nærmere kig på din kode for at se, om du kan finde problemet. Denne metode kræver naturligvis viden og erfaring. Med andre ord, du skal vide, hvad du laver. Hvis du er heldig, springer fejlen lige ud, og du slår dig i panden og siger: "Åh!" Når pandesmerterne aftager, kan du løse problemet.
Læg mærke til brugen af ordene "Hvis du er heldig." Det er fordi, du ofte opdager fejl, når du har arbejdet på dit program i otte timer i træk, klokken er 2, og du kører på koffein og viljestyrke. Til tider som det er du heldig, hvis du overhovedet kan se din kode, endsige finde fejlene. Derfor skal du ikke blive overrasket, hvis blot at undersøge din kode ikke er nok til at få dig til at finde og slette alle de fejl, den indeholder.
Brug af MsgBox-funktionen
Et almindeligt problem i mange programmer involverer en eller flere variabler, der ikke får de værdier, du forventer. I sådanne tilfælde er overvågning af variablerne, mens din kode kører, en nyttig fejlfindingsteknik. En måde at gøre dette på er ved at indsætte midlertidige MsgBox-funktioner i din rutine. For eksempel, hvis du har en variabel ved navn CellCount, kan du indsætte følgende sætning:
MsgBox CellCount
Når du udfører rutinen, viser MsgBox-funktionen CellCounts værdi.
Det er ofte nyttigt at vise værdierne af to eller flere variabler i meddelelsesboksen. Følgende sætning viser den aktuelle værdi af to variable: LoopIndex (1) og CellCount (72), adskilt af et mellemrum.
MsgBox LoopIndex & " " & CellCount
Bemærk, at de to variable kombineres med sammenkædningsoperatoren (&), og indsæt et mellemrum mellem dem. Ellers binder meddelelsesboksen de to værdier sammen, så de ligner en enkelt værdi. Du kan også bruge den indbyggede konstant, vbNewLine, i stedet for mellemrumstegnet. vbNewLine indsætter et linjeskift, som viser teksten på en ny linje. Følgende sætning viser tre variabler, hver på en separat linje:
Brug af en beskedboks til at vise værdien af tre variable.
MsgBox LoopIndex & vbNewLine & CellCount & vbNewLine & MyVal
Denne teknik er ikke begrænset til overvågning af variabler. Du kan bruge en beskedboks til at vise alle mulige nyttige oplysninger, mens din kode kører. For eksempel, hvis din kode går gennem en række ark, viser følgende sætning navnet og typen af det aktive ark:
MsgBox ActiveSheet.Name & “ “ & TypeName(ActiveSheet)
Hvis din beskedboks viser noget uventet, skal du trykke på Ctrl+Break, og du ser en dialogboks, der fortæller dig, at kodeudførelsen er blevet afbrudt, har du fire valgmuligheder:
-
Klik på knappen Fortsæt. Koden fortsætter med at køre.
-
Klik på knappen Afslut. Udførelse stopper.
-
Klik på Debug-knappen. VBE går i fejlretningstilstand.
-
Klik på knappen Hjælp. En hjælpeskærm fortæller dig, at du trykkede på Ctrl+Break. Det er med andre ord ikke særlig nyttigt.
Et tryk på Ctrl+Break standser eksekveringen af din kode og giver dig nogle valg.
Hvis dit tastatur ikke har en pausetast, kan du prøve at trykke på Ctrl+ScrollLock.
Du er velkommen til at bruge MsgBox-funktioner ofte, når du fejlretter din kode. Bare sørg for at fjerne dem, når du har identificeret og rettet problemet.
Indsættelse af Debug.Print-sætninger
Som et alternativ til at bruge MsgBox-funktioner i din kode, kan du indsætte en eller flere midlertidige Debug.Print-sætninger. Brug disse udsagn til at udskrive værdien af en eller flere variabler i vinduet Øjeblikkelig. Her er et eksempel, der viser værdierne af tre variable:
Debug.Print LoopIndex, CellCount, MyVal
Bemærk, at variablerne er adskilt med kommaer. Du kan vise så mange variabler som du vil med en enkelt Debug.Print-sætning.
Debug.Print sender output til vinduet Øjeblikkelig, selvom vinduet er skjult. Hvis VBEs øjeblikkelige vindue ikke er synligt, skal du trykke på Ctrl+G (eller vælge Vis → Øjeblikkeligt vindue). Her er noget output i vinduet Øjeblikkelig.
En Debug.Print-sætning sender output til vinduet Immediate.
I modsætning til MsgBox stopper Debug.Print-sætninger ikke din kode. Så du skal holde øje med Umiddelbar-vinduet for at se, hvad der sker.
Når du har fejlrettet din kode, skal du sørge for at fjerne alle Debug.Print-sætningerne. Selv store virksomheder som Microsoft glemmer af og til at fjerne deres Debug.Print-udsagn. I flere tidligere versioner af Excel, hver gang Analysis ToolPak-tilføjelsesprogrammet blev åbnet, ville du se flere mærkelige meddelelser i vinduet Øjeblikkelig. Det problem blev endelig løst i Excel 2007.
Brug af VBA debugger
Excel-designerne er fortrolige med begrebet fejl. Derfor indeholder Excel et sæt fejlfindingsværktøjer, der kan hjælpe dig med at rette problemer i din VBA-kode.