Suche…


Syntax

  • Debug.Print (Zeichenfolge)
  • Halt halt

Debug.Print

Um eine Liste der Fehlercode-Beschreibungen an das Debug.Print zu drucken, übergeben Sie sie an die Debug.Print Funktion:

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

Sie können das Direktfenster anzeigen, indem Sie:

  • Auswählen von V iew | Ich verwende Fenster aus der Menüleiste
  • Verwenden der Tastenkombination Strg-G

Halt

Der Befehl Stop unterbricht die Ausführung, wenn er aufgerufen wird. Von dort kann der Prozess fortgesetzt oder schrittweise ausgeführt werden.

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

Sofortiges Fenster

Wenn Sie eine Zeile mit Makrocode testen möchten, ohne ein komplettes Sub-Element ausführen zu müssen, können Sie Befehle direkt in das ENTER eingeben und die ENTER , um die Zeile auszuführen.

Um die Ausgabe einer Zeile zu testen, können Sie ihr ein Fragezeichen voranstellen ? um direkt in das Direktfenster zu drucken. Alternativ können Sie auch den print , um die Ausgabe drucken zu lassen.

Drücken Sie in dem Visual Basic-Editor CTRL + G , um das CTRL + G zu öffnen. So benennen Sie Ihre aktuell ausgewählte Blatt „ExampleSheet“, geben Sie Folgendes in das Direktfenster ein und drücken ENTER

   ActiveSheet.Name = "ExampleSheet"

So drucken Sie den Namen des aktuell ausgewählten Blatts direkt im Direktfenster

? ActiveSheet.Name
ExampleSheet

Diese Methode kann sehr nützlich sein, um die Funktionalität von integrierten oder benutzerdefinierten Funktionen zu testen, bevor sie in Code implementiert werden. Das folgende Beispiel veranschaulicht, wie das Direktfenster verwendet werden kann, um die Ausgabe einer Funktion oder einer Reihe von Funktionen zu testen, um ein erwartetes Ergebnis zu bestätigen.

'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

Das Direktfenster kann auch zum Festlegen oder Zurücksetzen von Application, Workbook oder anderen erforderlichen Eigenschaften verwendet werden. Dies kann nützlich sein, wenn sich in einer Subroutine Application.EnableEvents = False , die unerwartet einen Fehler auslöst, ohne dass der Wert auf True (was frustrierende und unerwartete Funktionen verursachen kann. In diesem Fall können die Befehle direkt eingegeben werden in das Direktfenster und starte:

? 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 fortgeschrittenere Debugging-Techniken kann ein Doppelpunkt : als Trennzeichen verwendet werden. Dies kann für mehrzeilige Ausdrücke verwendet werden, z. B. für das Schleifen im folgenden Beispiel.

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

Verwenden Sie den Timer, um Engpässe in der Leistung zu finden

Der erste Schritt bei der Optimierung der Geschwindigkeit besteht darin, die langsamsten Codeabschnitte zu finden. Die Timer VBA-Funktion gibt die Anzahl der seit Mitternacht verstrichenen Sekunden mit einer Genauigkeit von 1/56 Sekunde (3,90625 Millisekunden) auf Windows-basierten PCs zurück. Die VBA-Funktionen Now und Time sind nur auf eine Sekunde genau.

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"

Einen Haltepunkt zu Ihrem Code hinzufügen

Sie können Ihrem Code einfach einen Haltepunkt hinzufügen, indem Sie auf die graue Spalte links neben der Zeile Ihres VBA-Codes klicken, an der die Ausführung angehalten werden soll. In der Spalte wird ein roter Punkt angezeigt, und der Haltepunktcode wird ebenfalls rot hervorgehoben.

Sie können im gesamten Code mehrere Haltepunkte hinzufügen. Die Fortsetzung der Ausführung wird durch Drücken des Symbols "Wiedergabe" in der Menüleiste erreicht. Nicht jeder Code kann ein Haltepunkt als Variablendefinitionszeile sein, die erste oder letzte Zeile einer Prozedur und Kommentarzeilen können nicht als Haltepunkt ausgewählt werden.

Geben Sie hier die Bildbeschreibung ein

Debugger-Fenster "Locals"

Das Fenster "Locals" bietet einen einfachen Zugriff auf den aktuellen Wert von Variablen und Objekten im Rahmen der Funktion oder Subroutine, die Sie ausführen. Es ist ein unverzichtbares Werkzeug, um Ihren Code zu debuggen und Änderungen durchzugehen, um Probleme zu finden. Sie können damit auch Eigenschaften erkunden, die Sie möglicherweise nicht kennen.

Nehmen Sie das folgende Beispiel:

Option Explicit
Sub LocalsWindowExample()
    Dim findMeInLocals As Integer
    Dim findMEInLocals2 As Range
    
    findMeInLocals = 1
    Set findMEInLocals2 = ActiveWorkbook.Sheets(1).Range("A1")
End Sub

Klicken Sie im VBA-Editor auf Ansicht -> Lokalfenster

Wo das Menü der Einheimischen am Fenster steht

Nachdem wir den Code mit F8 durchlaufen haben, nachdem wir in die Subroutine geklickt haben, haben wir angehalten, bevor wir findMeinLocals zuweisen konnten. Unten sehen Sie den Wert 0 - und dies würde verwendet werden, wenn Sie ihm niemals einen Wert zugewiesen hätten. Das Bereichsobjekt lautet 'Nothing'.

In diesem Schritt sind die Variablen nichts ...

Das Anzeigen der Variablen ist nichts.

Wenn wir kurz vor dem Ende der Subroutine anhalten, können wir die endgültigen Werte der Variablen sehen.

Legen Sie einen Debug-Punkt fest ... wenn Sie möchten

Wir können findMeInLocals mit dem Wert 1 und den Typ Integer sowie FindMeInLocals2 mit einem Typ von Range / Range sehen. Wenn Sie auf das Pluszeichen klicken, können Sie das Objekt erweitern und seine Eigenschaften anzeigen, wie z. B. Anzahl oder Spalte.

Geben Sie hier die Bildbeschreibung ein



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow