excel-vba
Felsökning och felsökning
Sök…
Syntax
- Debug.Print (sträng)
- Stopp stopp
Debug.Print
Om du vill skriva ut en lista över felkodbeskrivningarna till det omedelbara fönstret Debug.Print
den till Debug.Print
funktionen:
Private Sub ListErrCodes()
Debug.Print "List Error Code Descriptions"
For i = 0 To 65535
e = Error(i)
If e <> "Application-defined or object-defined error" Then Debug.Print i & ": " & e
Next i
End Sub
Du kan visa omedelbart fönster genom:
- Att välja V iew | Jag mittenfönster från menyfältet
- Använd kortkommandot Ctrl-G
Sluta
Stop-kommandot pausar exekveringen när den anropas. Därifrån kan processen återupptas eller genomföras steg för steg.
Sub Test()
Dim TestVar as String
TestVar = "Hello World"
Stop 'Sub will be executed to this point and then wait for the user
MsgBox TestVar
End Sub
Omedelbart fönster
Om du vill testa en rad med makrokod utan att behöva köra en hel sub, kan du skriva kommandon direkt i omedelbart fönster och ENTER
på ENTER
att köra raden.
För att testa utgången från en linje kan du gå före den med ett frågetecken ?
för att skriva ut direkt till omedelbart fönster. Alternativt kan du också använda print
ut utskriften.
I Visual Basic Editor trycker du på CTRL + G
att öppna det omedelbara fönstret. Om du vill byta namn på det nuvarande markerade arket till "Exempelark" skriver du följande i omedelbart fönster och ENTER
på ENTER
ActiveSheet.Name = "ExampleSheet"
För att skriva ut det aktuella valda arkets namn direkt i omedelbart fönster
? ActiveSheet.Name
ExampleSheet
Denna metod kan vara mycket användbar för att testa funktionaliteten hos inbyggda eller användardefinierade funktioner innan de implementeras i kod. Exemplet nedan visar hur det omedelbara fönstret kan användas för att testa utgången från en funktion eller en serie funktioner för att bekräfta en förväntad.
'In this example, the Immediate Window was used to confirm that a series of Left and Right
'string methods would return the desired string
'expected output: "value"
print Left(Right("1111value1111",9),5) ' <---- written code here, ENTER pressed
value ' <---- output
Det omedelbara fönstret kan också användas för att ställa in eller återställa applikation, arbetsbok eller andra nödvändiga egenskaper. Detta kan vara användbart om du har Application.EnableEvents = False
i en subroutine som oväntat kastar ett fel, vilket gör att det stängs utan att återställa värdet till True
(vilket kan orsaka frustrerande och oväntat funktionalitet. I så fall kan kommandona skrivas direkt in i det omedelbara fönstret och kör:
? Application.EnableEvents ' <---- Testing the current state of "EnableEvents"
False ' <---- Output
Application.EnableEvents = True ' <---- Resetting the property value to True
? Application.EnableEvents ' <---- Testing the current state of "EnableEvents"
True ' <---- Output
För mer avancerade felsökningstekniker kan en kolon :
användas som en linjeseparator. Detta kan användas för uttryck i flera linjer, såsom looping i exemplet nedan.
x = Split("a,b,c",","): For i = LBound(x,1) to UBound(x,1): Debug.Print x(i): Next i '<----Input this and press enter
a '<----Output
b '<----Output
c '<----Output
Använd Timer för att hitta flaskhalsar i prestanda
Det första steget i att optimera för hastigheten är att hitta de långsammaste kodavsnitten. Timer
VBA-funktionen returnerar antalet sekunder som gått sedan midnatt med en precision på 1/256: e sekund (3,90625 millisekunder) på Windows-baserade datorer. VBA-funktionerna Now
och Time
är bara exakta till en sekund.
Dim start As Double ' Timer returns Single, but converting to Double to avoid
start = Timer ' scientific notation like 3.90625E-03 in the Immediate window
' ... part of the code
Debug.Print Timer - start; "seconds in part 1"
start = Timer
' ... another part of the code
Debug.Print Timer - start; "seconds in part 2"
Lägga till en brytpunkt till din kod
Du kan enkelt lägga till en brytpunkt i din kod genom att klicka på den grå kolumnen till vänster om raden i din VBA-kod där du vill att körningen ska stoppas. En röd prick visas i kolumnen och brytpunktskoden markeras också med rött.
Du kan lägga till flera brytpunkter i hela din kod och återuppta exekveringen uppnås genom att trycka på "spela" -ikonen i menyfältet. Inte all kod kan vara en brytpunkt som linjer med variabel definition, den första eller sista raden i en procedur och kommentarrader kan inte väljas som en brytpunkt.
Felsökare för felsökare
Fönstret Locals ger enkel åtkomst till det aktuella värdet på variabler och objekt inom ramen för den funktion eller subroutin du kör. Det är ett viktigt verktyg för att felsöka din kod och gå igenom ändringar för att hitta problem. Det låter dig också utforska egenskaper som du kanske inte visste funnits.
Ta följande exempel,
Option Explicit
Sub LocalsWindowExample()
Dim findMeInLocals As Integer
Dim findMEInLocals2 As Range
findMeInLocals = 1
Set findMEInLocals2 = ActiveWorkbook.Sheets(1).Range("A1")
End Sub
I VBA-redigeraren klickar du på Visa -> Lokalfönster
Sedan genom att gå igenom koden med F8 efter att ha klickat in i subrutinen, har vi slutat innan vi började tilldela findMeinLocals. Nedan kan du se att värdet är 0 --- och det är detta som skulle användas om du aldrig tilldelade det ett värde. Räckviddsobjektet är 'Ingenting'.
Om vi slutar precis innan subroutinen slutar, kan vi se de slutliga värdena för variablerna.
Vi kan se findMeInLocals med ett värde på 1 och typ av heltal, och FindMeInLocals2 med en typ av Range / Range. Om vi klickar på + -tecknet kan vi utöka objektet och se dess egenskaper, till exempel räkning eller kolumn.