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 ENTERENTER 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 ENTERENTER

   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.

ange bildbeskrivning här

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

Där lokalbefolkningsmenyn är på i fönstret

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'.

I detta steg är variablerna ingenting ...

Att visa variablerna är ingenting.

Om vi slutar precis innan subroutinen slutar, kan vi se de slutliga värdena för variablerna.

Ställ in en felsökningspunkt ... om du vill

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.

ange bildbeskrivning här



Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow