Ich führe Excel 2007 unter XP aus.
Gibt es eine Möglichkeit, die Ausführung eines Makros während seiner Ausführung anders als das Drücken der Escape-Taste zu stoppen? Wenn ich glaube, dass ich eine Endlosschleife erstellt oder sonst etwas durcheinander gebracht habe, drücke ich auf escape und es wird ein Fehler ausgegeben, aber das Makro wird angehalten.
Dieses Mal (und ich habe es schon früher gemacht, aber nicht so schlecht), habe ich eine msgbox für schnelles Debugging eingerichtet. Es stellte sich heraus, dass es etwa 6000 Mal wiederholt werden musste, was bedeutete, dass ich 6000 Nachrichtenboxen "OK" hatte, was einige Minuten dauerte. Ich habe vor dem Ausführen nicht gespeichert (ein weiterer Fehler), sodass ich den Task-Manager nicht öffnen konnte.
Gibt es eine andere Möglichkeit, die Ausführung eines Makros zu stoppen, falls ich noch einmal so überhandnehme?
UsoCRTL+BREAKsospendere l'esecuzione in qualsiasi momento. Sarai messo in modalità pausa e potrai premereF5per continuare l'esecuzione oF8per eseguire il codice passo-passo nel visual debugger.
Ovviamente questo funziona solo quando non ci sono finestre di messaggio aperte, quindi se il tuo codice VBA pro qualche motivo diventerà un po 'complicato premere i tasti al momento giusto.
È anche possible modificare la maggior parte del codice mentre è in esecuzione.
Usa Debug.Print
per stampare i messaggi su Finestramediata nell'editor VBA, è molto più conveniente di MsgBox
.
Usa breakpoints o la parola chiave Stop
per interrompere automaticamente l'esecuzione in aree interessanti.
È possible utilizzare Debug.Assert
per interrompere l'esecuzione condizionale .
STRG + SCR LK (Scroll Lock) funktionierte für mich.
Manchmal ist der richtige Schlüsselsatz (Pause, Break oder ScrLk) sind auf der Tastatur nicht verfügbar (kommt meistens bei Laptop-Benutzern vor) und drücken Esc 2, 3 oder mehrmals hält das Makro auch nicht an.
Ich blieb auch hängen und fand schließlich die Lösung für die Eingabehilfen von Windows. Danach habe ich alle untersuchten Optionen ausprobiert und 3 davon funktionierten in 3 verschiedenen Szenarien für mich.
Schritt # 01: Wenn Ihre Tastatur keine bestimmte Taste hat, machen Sie sich bitte keine Sorgen und öffnen Sie die 'OnScreen-Tastatur' unter Windows Utilities, indem Sie drücken Win + U.
Schritt # 02: Probieren Sie jetzt eine der folgenden Optionen aus, die je nach Systemarchitektur, d. H. Betriebssystem und Office-Version, auf jeden Fall funktionieren
Sie werden mit den obigen Tastenkombinationen in den Unterbrechungsmodus versetzt, da das Makro die Ausführung anhält und die aktuelle Aufgabe sofort beendet. Zum Beispiel. Wenn die Daten aus dem Web abgerufen werden, wird sie unmittelbar vor dem Ausführen eines nächsten Befehls angehalten, jedoch nach dem Abrufen der Daten, woraufhin gedrückt werden kann F5 oder F8 um das Debuggen fortzusetzen.
Sie können ein Makro stoppen, indem Sie drücken ctrl + break aber wenn Sie nicht die Umbruchtaste haben, können Sie diesen autohotkey (Open Source) Code verwenden:
+ ESC :: SendInput {CtrlBreak} return
Drücken Sie shift + Escape wird wie Drücken sein ctrl + break und so wird Ihr Makro stoppen.
Alle Ehre zu diese Seite
Ich benutze MsgBox auch gerne zum Debuggen, und ich habe dieses Problem mehr als einmal ausgeführt. Jetzt füge ich dem Popup immer eine Schaltfläche "Abbrechen" hinzu und verlasse das Makro, wenn "Abbrechen" gedrückt wird. Beispielcode:
If MsgBox("Debug message", vbOKCancel, "Debugging") = vbCancel Then Exit Sub
Ich habe festgestellt, dass manchmal, wenn ich ein zweites Excel-Fenster öffne und ein Makro in diesem zweiten Fenster ausführt, die Ausführung des ersten Fensters stoppt. Ich weiß nicht, warum es nicht immer funktioniert, aber Sie können es versuchen.
Sie können auch versuchen, die "FN" - oder Funktionstaste mit der Taste "Break" oder mit der Taste "sys rq" - Systemanforderung zu drücken, da dies - gleichzeitig gedrückt werden muss, und das laufende Makro beendet wird
Ich habe vergessen, eine Zeile mit einer MsgBox auszukommentieren, bevor Sie mein Makro ausführen. Das heißt, ich müsste über hunderttausend Mal auf OK klicken. Die ESC-Taste hat nur das Meldungsfeld umgangen, die Ausführung des Makros jedoch nicht angehalten. Wenn Sie die ESC-Taste einige Sekunden lang gedrückt halten, konnte ich die Ausführung des Codes stoppen.
Dies ist auf keinen Fall eine elegante Lösung, und ich würde es nicht empfehlen, wenn Sie nicht verzweifelt sind.
Wenn Sie über Daten iterieren, können Sie überprüfen, ob sich eine Datei in einem Ordner irgendwo in Ihrer Schleife befindet, d. H. Ihr Code wird solange ausgeführt, wie eine bestimmte Datei nicht im Ordner gefunden wird. Sie können dies tun, indem Sie die Zeilen hinzufügen:
DirFile = FilePath & "ExampleFolder\stop.txt"
If Len(Dir(DirFile)) = 0 Then
Else
MsgBox ("Code stopped by stopfile")
Exit Sub
End If
am Ende deiner Schleife. Dadurch wird das Sub verlassen, wenn Sie Ihrem ExampleFolder eine Textdatei mit dem Namen stop hinzufügen.
ESC und CTRL-BREAK haben bei mir gerade nicht funktioniert. Aber STRG-ESC hat funktioniert !? Keine Ahnung warum, aber ich dachte, ich würde es rausschmeißen, falls es jemand anderem hilft. (Ich hatte vergessen, i = i + 1 in meiner Schleife ...)