webentwicklung-frage-antwort-db.com.de

Das Stoppen der Excel-Makro-Ausführung beim Drücken von Esc funktioniert nicht

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?

31
ptpaterson

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 .

51
Tomalak

STRG + SCR LK (Scroll Lock) funktionierte für mich.

15
VBANoob

Manchmal ist der richtige Schlüsselsatz (PauseBreak 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

  • Ctrl + Pause
  • Ctrl + ScrLk
  • Esc + Esc (Zweimal hintereinander drücken)

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.

6
jainashish

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

4
Lisa

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
2
Robert

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.

1
Manuel

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

1
AMR

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.

0
Yemi Adeoye

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.

0
bm13563

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

0
dave