Die Excel VBA-App wird spontan mit der Meldung "Die Codeausführung wurde angehalten" gestoppt.

149

Nach dem, was ich im Internet sehen kann, ist dies eine ziemlich häufige Beschwerde, aber Antworten scheinen seltener zu sein. Das Problem ist folgendes:

Wir haben eine Reihe von Excel VBA-Apps, die auf mehreren Computern der Benutzer perfekt funktionieren. Auf einem Computer halten sie jedoch in bestimmten Codezeilen an. Es sind immer die gleichen Linien, aber diese Linien scheinen nichts miteinander zu tun zu haben.

Wenn Sie nach dem Anhalten F5 (Ausführen) drücken, wird die App fortgesetzt, sodass fast ein Haltepunkt hinzugefügt wurde. Wir haben versucht, "Alle Pausen entfernen" aus dem Menü auszuwählen und sogar eine Pause hinzuzufügen und wieder zu entfernen.

Wir hatten dieses Problem bereits mit einzelnen Apps und haben es durch Ausschneiden von Code aus Modulen, Kompilieren und anschließendes Einfügen von Code usw. "verkürzt".

Das Problem scheint sich nun eher auf Excel selbst als auf eine einzelne XLS-Datei zu beziehen, daher sind wir uns nicht sicher, wie wir dies verwalten sollen.

Jede Hilfe wäre dankbar :)

Vielen Dank,

Philip Whittington

Phil Whittington
quelle
2
Drückt der Benutzer während einer Verarbeitung die Escape-Taste? Oder eine andere App, die einen Escape-Schlüssel sendet?
Shahkalpesh
1
Nachdem Sie Alle Haltepunkte entfernen ausgewählt haben, haben Sie auch das VBA-Projekt neu kompiliert und gespeichert? Ich habe ein verwandtes Problem in Word VBA gesehen, bei dem zuvor entfernte Haltepunkte immer noch eine Unterbrechung verursachen.
Dirk Vollmar
Während der Hinrichtung wird nichts verarbeitet, shahkalpesh. Divo - danke, ich habe sie vielleicht nicht genau in dieser Reihenfolge ausprobiert. Werde das jetzt tun ...
Phil Whittington
Zusätzlich zum Kommentar von divo kann es nützlich sein, die relevanten Zeilen und alle Zeilen, die das Debuggen stoppen würden, auskommentieren. Sie können dann kommentiert und der Code (erneut) neu kompiliert werden.
Fionnuala
Und ich habe vergessen zu erwähnen: Um tatsächlich eine Neuerstellung auszulösen, ist es normalerweise erforderlich, eine Zeile zu ändern und dann den Cursor in die nächste Zeile zu bewegen, um den Quellcode als geändert zu kennzeichnen (z. B. eine Änderung vornehmen, den Cursor nach unten bewegen, verschieben Cursor nach oben und die Änderung manuell rückgängig machen)
Dirk Vollmar

Antworten:

404

Ich habe eine 2. Lösung gefunden.

  1. Klicken Sie im Popup auf die Schaltfläche "Debuggen".
  2. Drücken Sie zweimal Ctrl+ Pause|Break.
  3. Drücken Sie die Wiedergabetaste, um fortzufahren.
  4. Speichern Sie die Datei nach Abschluss.

Hoffe das hilft jemandem.

Stan
quelle
12
+1: Wow, dieser Beitrag hat mich vor einer Welt voller Schmerzen gerettet. Eine sehr unerwartete Lösung für ein bizarres Problem. Nachdem ich zweimal [Strg + Pause] gedrückt und fortgefahren hatte, speicherte ich die Datei. Danach trat das Problem nicht mehr auf, als ich die Datei schloss und erneut öffnete.
Dbenham
28
Wenn jemals eine Antwort eine Gegenstimme verdient hat, ist dies die richtige. Gute Antwort.
The_Barman
4
Das hat mir sehr geholfen. Diese Antwort hat 1000 positive Stimmen verdient. Ich war in den letzten 4-5 Tagen von diesem Problem geplagt. Das hat perfekt funktioniert.
Demouser123
25
Weiß jemand warum das funktioniert? Oder woher kommt es? Ist das Magie?
ZX9
4
Hilft mir 2017 immer noch. Danke!
Platte
16

Dieses Problem ist auf eine merkwürdige Eigenart in Office / Windows zurückzuführen.

Nachdem ich in den letzten Tagen denselben VBA-Code entwickelt und hunderte Male (buchstäblich) ausgeführt hatte, stieß ich gerade auf dieses Problem. Das einzige, was anders war, ist, dass ich kurz vor dem Auftreten dieses verwirrenden Problems versehentlich die Ausführung des VBA-Codes mit einer unorthodoxen Methode beendet habe.

Ich habe alle temporären Dateien bereinigt, neu gestartet usw. Als ich den Code nach all dem erneut ausführte, bekam ich immer noch das Problem - bevor ich in die erste Schleife eintrat. Es ist sinnvoll, im Popup die Taste "Debug" zu drücken, dann zweimal [Strg + Pause] zu drücken und danach ohne Unterbrechung fortzufahren ", da etwas in der Kombination von Office / Windows die Ausführung nicht freigegeben hat. Es klemmt.

Die redundante Aktion Strg + Pause löst wahrscheinlich die verbleibende Ausführung auf.

user2052260
quelle
14

Eine Lösung ist hier :

Die Lösung für dieses Problem besteht darin, die Codezeile "Application.EnableCancelKey = xlDisabled" in die erste Zeile Ihres Makros einzufügen. Dadurch wird das Problem behoben und Sie können das Makro erfolgreich ausführen, ohne die Fehlermeldung "Code" zu erhalten Ausführung wurde unterbrochen “.

Nachdem ich diese Codezeile eingefügt hatte, konnte ich Strg + Pause nicht mehr verwenden. So funktioniert es aber nicht sehr.

Stan
quelle
Danke, Stan - das ist sicherlich eine Lösung, wenn Sie unter Zeitdruck stehen und nur wollen, dass es läuft! Sehr hilfreich.
Phil Whittington
1
Sie können es in derselben Ausführung wieder aktivieren, indem Sie es auf setzen xlInterrupt. (Es wird auch automatisch wieder aktiviert, wenn die Codeausführung abgeschlossen ist.) Ihre andere Antwort hat bei mir funktioniert, aber im schlimmsten Fall kann dies als vorübergehende Korrektur verwendet werden. Weitere Informationen zu Application.EnableCancelKey
Kodithic
2
Die richtige Antwort - und die einzig richtige Antwort - ist oben. Durch das Einfügen einer Codezeile, einschließlich "Application.EnableCancelKey = xlDisabled", wird das Problem lediglich in eine andere Zeile verschoben. Oft ist der neue Haltepunkt genau die Zeile, die Sie eingefügt haben. Der einzige Grund, warum ich Ihre Antwort nicht ablehne, ist, dass ich sie im letzten Jahrzehnt wiederholt selbst verwendet habe.
Nigel Heffernan
6

Ich habe festgestellt, dass das Problem durch Drücken von Strg + Pause behoben wurde, während das Makro nicht ausgeführt wurde.

James
quelle
3

Ich würde die üblichen Abhilfemaßnahmen ausprobieren: - Führen Sie Rob Boveys VBA Code Cleaner auf Ihrem VBA-Code aus - Entfernen Sie alle Add-Ins auf dem PC des Benutzers, insbesondere COM- und .NET-Add-Ins. - Löschen Sie alle EXD-Dateien des Benutzers (MSoft Update-Inkompatibilitäten). - Führen Sie Excel aus Auf dem Benutzersystem erkennen und reparieren - Überprüfen Sie die Größe der XLB-Datei des Benutzers (sollte 20 bis 30 KB betragen). Starten Sie das System neu und löschen Sie alle temporären Dateien des Benutzers

Charles Williams
quelle
2

Vielen Dank an alle für ihre Beiträge. Dieses Problem wurde durch Auswahl von REPAIR in der Systemsteuerung behoben. Ich denke, dies registriert einige der nativen COM-Komponenten von Office explizit neu und führt Dinge aus, die REINSTALL nicht tut. Ich gehe davon aus, dass Letzterer nur eine Checkliste durchläuft und manchmal akzeptiert, was vorhanden ist, wenn es möglicherweise bereits installiert ist. Ich hatte dann ein separates Problem mit der Registrierung meiner eigenen .NET-DLL für COM-Interop auf dem Computer des Benutzers (obwohl dies auch auf anderen Computern funktioniert), obwohl ich denke, dass dies eher mein Fehler als Microsoft war. Nochmals vielen Dank, ich weiß das wirklich zu schätzen.

Phil Whittington
quelle
2

Ich bin bei der Entwicklung einer komplexen Excel VBA-App einige Male auf dieses Problem gestoßen. Manchmal begann Excel, VBA-Objekte ganz zufällig zu beschädigen. Und das einzige Mittel war, die Maschine neu zu starten. Nach dem Neustart begann Excel normalerweise normal zu handeln.

Bald habe ich herausgefunden, dass eine mögliche Lösung für dieses Problem darin besteht, einmal STRG + Pause zu drücken, wenn das Makro NICHT ausgeführt wird. Vielleicht kann dir das auch helfen.

Bazinac
quelle
2

Ich hatte dieses Problem auch bei der Verwendung von Excel 2007 mit einer Arbeitsmappe foobar.xlsm (Makro aktiviert), bei der die Meldung "Codeausführung wurde unterbrochen" angezeigt wurde, indem einfach versucht wurde, die Arbeitsmappe auf dem roten X in der rechten Ecke zu schließen, ohne dass Makros ausgeführt wurden alle oder alle "Initialisierungs" -Makros für Formulare, Arbeitsmappen oder Arbeitsblätter. Die Optionen, die ich bekam, waren "Ende" oder "Weiter", Debug war immer ausgegraut. Ich habe wie in einem vorherigen Poster vorgeschlagen, Systemsteuerung-> Programme und Funktionen-> Rechtsklick auf "Microsoft Office Proffesional 2007" (in meinem Fall) -> Ändern-> Reparieren.

Dies löste das Problem für mich. Ich könnte hinzufügen, dass dies kurz nach einem MS-Update passiert ist, und ich habe auch ein Add-In in Excel namens "Team Foundation" von Microsoft gefunden, das ich sicherlich nicht freiwillig installiert habe

Carlito
quelle
1

Ich möchte aus folgenden Gründen weitere Details zu Stans Antwort Nr. 2 hinzufügen :

  • Ich habe mich mehr als ein Dutzend Mal mit diesem Problem befasst und je nach Projektbedingungen zwischen Stans Voodoo-Magie-Antwort Nr. 1 oder Nr. 2 gewählt. Als ich mich immer wieder damit auseinandersetzte, wurde ich fragender, warum es überhaupt passiert.

  • Ich möchte auch eine Antwort für Mac-Benutzer hinzufügen.

  • Bei beiden möglichen Antworten gibt es Einschränkungen:

    • Wenn der Code geschützt ist (und Sie das Passwort nicht kennen), hilft Antwort 1 nicht weiter.
    • Wenn der Code ungeschützt ist, können Sie mit Antwort 2 den Code nicht debuggen.

  1. Dies kann aus einem der folgenden Gründe geschehen:

    • Betriebssystem, das dem Excel-Prozess keine Systemressourcen zuweist. ( Lösung: Man muss nur das Betriebssystem starten - die Erfolgsquote ist sehr niedrig, aber es ist bekannt, dass sie viele Male funktioniert.)

    • P-Code ist der Zwischencode, der in Visual Basic (vor .NET) verwendet wurde und daher weiterhin in der VBA verwendet wird. Es ermöglichte eine kompaktere ausführbare Datei auf Kosten einer langsameren Ausführung. Warum spreche ich über P-Code? Weil es manchmal zwischen mehreren Ausführungen und großen Dateien beschädigt wird oder nur aufgrund der Installation der Software (Excel) irgendwo beschädigt wurde. Wenn der P-Code beschädigt. Die Codeausführung wird immer wieder unterbrochen. Lösung: In diesen Fällen wird davon ausgegangen, dass Ihr Code beschädigt wurde, und es besteht die Möglichkeit, dass Ihre Excel-Arbeitsmappe in Zukunft ebenfalls beschädigt wird und Meldungen wie "Excel-Datei beschädigt und kann nicht geöffnet werden" angezeigt werden. Daher können Sie sich als schnelle Lösung auf Antwort 1 oder Antwort 2 gemäß Ihren Anforderungen verlassen. Ignorieren Sie jedoch niemals die Anzeichen von Korruption. Es ist besser, Ihre Codemodule in den Editor zu kopieren, die Module zu löschen, die Arbeitsmappe zu speichern und zu schließen und das Excel zu schließen. Öffnen Sie nun die Arbeitsmappe erneut und erstellen Sie neue Module mit dem zuvor in den Editor kopierten Code.

  2. Probieren Sie für Mac-Benutzer eine der folgenden Optionen aus, die je nach Systemarchitektur, dh Betriebssystem und Office-Version, auf jeden Fall funktionieren

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

Sie werden mit den oben genannten Tastenkombinationen in den Unterbrechungsmodus versetzt, da das Makro die Ausführung unterbricht und die aktuelle Aufgabe sofort beendet. Dies ist der Ersatz von Schritt 2.

  1. Lösung: Um die Einschränkung der Verwendung von Antwort 1 und Antwort 2 zu überwinden , verwende ich xlErrorHandlerzusammen mit der ResumeAnweisung im Fehlerhandler, wenn der Fehlercode 18 ist. Anschließend wird der Interrupt als Fehler an die laufende Prozedur gesendet, der durch einen Fehler abgefangen werden kann Handler, der mit einer On Error GoTo-Anweisung eingerichtet wurde. Der überfüllbare Fehlercode ist 18. Die aktuelle Prozedur wird unterbrochen, und der Benutzer kann die Prozedur debuggen oder beenden. Microsoft weist darauf hin, dass dies nicht verwendet wird, wenn Ihr Fehlerbehandler über eine Wiederaufnahme-Anweisung verfügt. Andernfalls kehrt Ihr Fehlerbehandler immer zur gleichen Anweisung zurück. Genau das wollen wir bei unerwünschten bedeutungslosen Unterbrechungen der Codeausführung.

jainashish
quelle
0

Mein aktueller Ruf erlaubt es noch nicht, dies als Kommentar zu posten. Stans Lösung zum Aufrufen des Debug-Modus, zweimaliges Drücken von Strg + Pause, Weiterspielen, Speichern hat mein Problem gelöst, aber ich habe zwei unerwartete Wendungen:

  1. Meine Projektstruktur ist passwortgeschützt. Um in den Debug-Modus zu gelangen, musste ich zuerst in den Entwicklermodus wechseln, auf die Projektstruktur klicken und das Passwort eingeben.

  2. Mein Projekt ist eine Vorlagendatei (.xmtl). Ich habe die Datei per Doppelklick geöffnet, wodurch sie als XML mit einer "1" am Ende des vorherigen Dateinamens geöffnet wird. Ich habe den Fehler wie durch Stans Anweisung behoben und als diese ... 1.xml Datei gespeichert. Als ich dann die Vorlage erneut öffnete, diesmal als Vorlage, und dieselbe Fehlerbehebung auf diese Datei anwenden wollte, war der Fehler verschwunden! Ich habe diese Datei nicht geändert und immer noch keinen Fehler beim Ausführen des Makros. Dies bedeutet für mich, dass sich der Fehler nicht in der Datei befindet, sondern in einer (versteckten) Einstellung in Excel.

blablubbb
quelle
-1

Das Problem scheint sich nun auf Excel selbst zu beziehen

Neu installieren und flicken :) Sonst ist es schwer zu sagen.

Andy
quelle
Wir haben eine Neuinstallation versucht, obwohl der Benutzer den Neustart "vergessen" hat, nachdem der Support-Mitarbeiter seine Aufgaben erledigt hat. Ich versuche, eine erneute Neuinstallation von Office zu vermeiden, aber dies kann unvermeidlich sein ... Danke
Phil Whittington