Du kan stöta på några problem med din VBA-kod, men hur hittar du problemet? Ibland kan din VBA-kod behöva lite felsökning. Fortsätt läsa för att upptäcka de fyra vanligaste metoderna för att felsöka Excel VBA-kod:
-
Undersöker koden
-
Infoga MsgBox-funktioner på olika platser i din kod
-
Infogar Debug.Print-satser
-
Använda Excel inbyggda felsökningsverktyg
Undersöker din kod
Den kanske enklaste felsökningstekniken är helt enkelt att titta närmare på din kod för att se om du kan hitta problemet. Denna metod kräver förstås kunskap och erfarenhet. Med andra ord, du måste veta vad du gör. Om du har tur hoppar felet ut direkt, och du slår dig i pannan och säger: "Oj!" När smärtan i pannan minskar kan du åtgärda problemet.
Lägg märke till användningen av orden "Om du har tur." Det beror på att du ofta upptäcker fel när du har arbetat med ditt program i åtta timmar i sträck, klockan är 02.00 och du kör på koffein och viljestyrka. Vid sådana tillfällen har du tur om du ens kan se din kod, än mindre hitta felen. Bli därför inte förvånad om det inte räcker att bara undersöka din kod för att få dig att hitta och radera alla buggar den innehåller.
Använda MsgBox-funktionen
Ett vanligt problem i många program innebär att en eller flera variabler inte får de värden du förväntar dig. I sådana fall är övervakning av variabeln(erna) medan din kod körs en användbar felsökningsteknik. Ett sätt att göra detta är genom att infoga tillfälliga MsgBox-funktioner i din rutin. Till exempel, om du har en variabel som heter CellCount, kan du infoga följande uttalande:
MsgBox CellCount
När du kör rutinen visar MsgBox-funktionen CellCounts värde.
Det är ofta bra att visa värdena för två eller flera variabler i meddelanderutan. Följande sats visar det aktuella värdet för två variabler: LoopIndex (1) och CellCount (72), separerade med ett mellanslag.
MsgBox LoopIndex & " " & CellCount
Lägg märke till att de två variablerna kombineras med sammanlänkningsoperatorn (&) och infoga ett blanksteg mellan dem. Annars sammanfogar meddelanderutan de två värdena så att de ser ut som ett enda värde. Du kan också använda den inbyggda konstanten, vbNewLine, i stället för mellanslagstecknet. vbNewLine infogar en radmatningsbrytning, som visar texten på en ny rad. Följande uttalande visar tre variabler, var och en på en separat rad:
Använda en meddelanderuta för att visa värdet på tre variabler.
MsgBox LoopIndex & vbNewLine & CellCount & vbNewLine & MyVal
Denna teknik är inte begränsad till att övervaka variabler. Du kan använda en meddelanderuta för att visa all möjlig användbar information medan din kod körs. Om din kod till exempel går igenom en serie ark visar följande sats namnet och typen av det aktiva arket:
MsgBox ActiveSheet.Name & “ “ & TypeName(ActiveSheet)
Om din meddelanderuta visar något oväntat, tryck på Ctrl+Break, och du ser en dialogruta som talar om för dig att kodexekveringen har avbrutits, du har fyra val:
-
Klicka på knappen Fortsätt. Koden fortsätter att köras.
-
Klicka på knappen Avsluta. Utförandet upphör.
-
Klicka på Debug-knappen. VBE går in i felsökningsläge.
-
Klicka på knappen Hjälp. En hjälpskärm berättar att du tryckte på Ctrl+Break. Det är med andra ord inte särskilt användbart.
Att trycka på Ctrl+Break stoppar exekveringen av din kod och ger dig några val.
Om ditt tangentbord inte har en bryttangent, försök att trycka på Ctrl+ScrollLock.
Använd gärna MsgBox-funktioner ofta när du felsöker din kod. Se bara till att du tar bort dem när du har identifierat och åtgärdat problemet.
Infogar Debug.Print-satser
Som ett alternativ till att använda MsgBox-funktioner i din kod, kan du infoga en eller flera tillfälliga Debug.Print-satser. Använd dessa satser för att skriva ut värdet på en eller flera variabler i fönstret Omedelbart. Här är ett exempel som visar värdena för tre variabler:
Debug.Print LoopIndex, CellCount, MyVal
Lägg märke till att variablerna är separerade med kommatecken. Du kan visa hur många variabler du vill med en enda Debug.Print-sats.
Debug.Print skickar utdata till Immediate-fönstret även om det fönstret är dolt. Om VBE:s omedelbara fönster inte är synligt, tryck på Ctrl+G (eller välj Visa → Omedelbart fönster). Här är lite utdata i fönstret Omedelbart.
En Debug.Print-sats skickar utdata till fönstret Immediate.
Till skillnad från MsgBox stoppar Debug.Print-satser inte din kod. Så du måste hålla ett öga på fönstret Direkt för att se vad som händer.
När du har felsökt din kod, se till att ta bort alla Debug.Print-satser. Även stora företag som Microsoft glömmer ibland bort att ta bort sina Debug.Print-uttalanden. I flera tidigare versioner av Excel, varje gång Analysis ToolPak-tillägget öppnades, skulle du se flera konstiga meddelanden i fönstret Direkt. Det problemet åtgärdades äntligen i Excel 2007.
Använder VBA debugger
Excel-designerna är väl förtrogna med begreppet buggar. Följaktligen innehåller Excel en uppsättning felsökningsverktyg som kan hjälpa dig att rätta till problem i din VBA-kod.