167 Stimmen

Excel VBA App stoppt spontan mit der Meldung "Codeausführung wurde angehalten".

Von dem, was ich im Web 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 einer Reihe von Benutzermaschinen perfekt funktionieren. Auf einem bestimmten Rechner stoppen sie jedoch an bestimmten Codezeilen. Es sind immer die gleichen Zeilen, aber diese Zeilen scheinen nichts miteinander gemein zu haben.

Wenn Sie nach dem Halt F5 (ausführen) drücken, läuft die App weiter, daher wirkt es fast so, als ob ein Haltepunkt hinzugefügt wurde. Wir haben versucht, "Alle Haltepunkte entfernen" im Menü auszuwählen und sogar einen Haltepunkt hinzuzufügen und wieder zu entfernen.

Wir hatten dieses Problem schon bei einzelnen Apps zuvor und haben es durch Ausschneiden von Code aus Modulen, Kompilieren und anschließendes Einfügen usw. 'hingebogen'.

Das Problem scheint nun eher mit Excel selbst als mit einer einzelnen .xls-Datei zusammenzuhängen, daher sind wir uns ein wenig unsicher, wie wir damit umgehen sollen.

Jede Hilfe wäre willkommen :)

Vielen Dank,

Philip Whittington

2voto

Phil Whittington Punkte 2015

Danke an alle für ihre Beiträge. Dieses Problem wurde durch die Auswahl von REPARATUR im Bedienfeld gelöst. Ich vermute, dass dadurch einige der nativen COM-Komponenten von Office explizit neu registriert werden und Dinge gemacht werden, die bei einer NEUINSTALLATION nicht durchgeführt werden. Ich nehme an, dass letzteres nur eine Checkliste durchläuft und manchmal akzeptiert, was bereits installiert ist, vielleicht. Ich hatte dann ein separates Problem mit der Registrierung meiner eigenen .NET-DLL für COM-Interop auf dem Benutzerrechner (obwohl dies auch auf anderen Rechnern funktioniert hat), auch wenn ich denke, dass dies mein Fehler war und nicht von Microsoft. Nochmals vielen Dank, ich schätze es wirklich.

2voto

bazinac Punkte 618

Ich bin während der Entwicklung einer komplexen Excel VBA-App schon mehrmals auf dieses Problem gestoßen. Manchmal begann Excel, VBA-Objekte ziemlich zufällig zu brechen. Und das einzige Heilmittel war, die Maschine neu zu starten. Nach dem Neustart begann Excel normalerweise normal zu funktionieren.

Bald habe ich herausgefunden, dass eine mögliche Lösung für dieses Problem darin besteht, einmal STRG+Unterbrechen zu drücken, wenn das Makro NICHT läuft. Vielleicht kann das auch Ihnen helfen.

2voto

Carlito Punkte 21

Ich hatte auch dieses Problem mit Excel 2007 und einer foobar.xlsm (makrofähigen) Arbeitsmappe, die beim Versuch, die Arbeitsmappe einfach über das rote X in der rechten Ecke zu schließen, die Meldung "Die Codeausführung wurde unterbrochen" erhielt, ohne dass Makros liefen, oder irgendwelche "Initialisieren"-Makros für Formulare, Arbeitsmappen oder Tabellenblätter. Die Optionen, die ich bekam, waren "Beenden" oder "Fortsetzen", Debuggen war immer ausgegraut. Ich habe wie ein vorheriger Poster vorgeschlagen hat, im Kontrollzentrum -> Programme und Funktionen -> rechtsklick auf "Microsoft Office Professional 2007" (in meinem Fall) -> Ändern -> Reparieren.

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

1voto

jainashish Punkte 3632

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

  • Ich habe dieses Problem selbst mehr als ein Dutzend Mal erlebt und je nach Projektbedingungen zwischen Stans Voodoo-Magie-Antwort #1 oder #2 gewählt. Nachdem ich immer wieder damit konfrontiert wurde, wurde ich neugieriger, warum es überhaupt passiert.

  • Ich würde auch gerne eine Antwort für Mac-Benutzer hinzufügen.

  • Es gibt Einschränkungen bei beiden möglichen Antworten:

    • Wenn der Code geschützt ist (und Sie das Passwort nicht kennen), dann hilft Antwort #1 nicht.
    • Wenn der Code nicht geschützt ist, lässt Antwort #2 Sie den Code nicht debuggen.

  1. Es kann aufgrund eines der folgenden Gründe passieren:

    • Das Betriebssystem weist keine Systemressourcen dem Excel-Prozess zu. (Lösung: Man muss einfach das Betriebssystem starten - die Erfolgsrate ist sehr gering, hat aber bereits mehrmals funktioniert)

    • P-Code ist der Zwischencode, der in Visual Basic (vor .NET) verwendet wurde und daher immer noch in der VBA verwendet wird. Er ermöglichte ein kompakteres ausführbares Programm auf Kosten einer langsameren Ausführung. Warum spreche ich über P-Code? Weil er manchmal zwischen mehreren Ausführungen und großen Dateien oder einfach durch die Installation der Software (Excel) beschädigt wird. Wenn der P-Code beschädigt ist, wird die Codeausführung fortlaufend unterbrochen. Lösung: In solchen Fällen wird angenommen, dass Ihr Code anfängt zu korruptieren und die Chancen in Zukunft bestehen, dass Ihre Excel-Arbeitsmappe auch korrupt wird und Ihnen Meldungen wie "Excel-Datei ist beschädigt und kann nicht geöffnet werden" gibt. Daher können Sie als schnelle Lösung auf Antwort #1 oder Antwort #2 je nach Bedarf vertrauen. Ignorieren Sie jedoch niemals die Anzeichen von Korruption. Es ist besser, Ihre Code-Module in den Notepad zu kopieren, die Module zu löschen, die Arbeitsmappe zu speichern und zu schließen, Excel zu schließen. Öffnen Sie nun die Arbeitsmappe erneut und beginnen Sie mit der Erstellung neuer Module mit dem zuvor in Notepad kopierten Code.

  2. Mac-Benutzer, versuchen Sie eine der folgenden Optionen, eine davon wird je nach Ihrem Systemarchitektur, d.h. Betriebssystem- und Office-Version, definitiv funktionieren

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

Mit den oben genannten Tastenkombinationen werden Sie in den Unterbrechungsmodus versetzt, da das Makro die Ausführung sofort beendet und die aktuelle Aufgabe beendet. Dies ersetzt Schritt 2.

  1. Lösung: Um die Einschränkung bei der Verwendung von Antwort #1 und Antwort #2 zu überwinden, verwende ich xlErrorHandler zusammen mit der Resume-Anweisung im Fehlerhandler, wenn der Fehlercode 18 lautet. Dann wird die Unterbrechung als Fehler an das laufende Verfahren gesendet, das von einem Fehlerbehandlungsroutine mit einer On Error GoTo-Anweisung festgelegt ist. Der erfassbare Fehlercode ist 18. Das aktuelle Verfahren wird unterbrochen, und der Benutzer kann das Verfahren debuggen oder beenden. Microsoft warnt davor, dies nicht zu verwenden, wenn Ihr Fehlerbehandler eine Resume-Anweisung hat, da Ihr Fehlerbehandler sonst immer zur gleichen Anweisung zurückkehrt. Genau das wollen wir bei unerwünschten sinnlosen Unterbrechungen der Codeausführung.

0voto

blablubbb Punkte 95

Meine derzeitige Reputation erlaubt es noch nicht, dies als Kommentar zu posten. Stans Lösung, in den Debug-Modus zu gelangen, zweimal Strg+Pause zu drücken, weiterzuspielen, zu speichern, hat mein Problem gelöst, aber ich habe zwei unerwartete Wendungen:

  1. Mein Projektstruktur ist passwortgeschützt, daher musste ich, um in den Debug-Modus zu gelangen, zunächst in den Entwicklermodus wechseln, auf die Projektstruktur klicken und das Passwort eingeben.

  2. Mein Projekt ist eine Vorlagendatei (.xmtl). Ich habe die Datei durch Doppelklick geöffnet, was sie als .xml mit einer "1" am Ende des vorherigen Dateinamens öffnet. Ich habe den Fehler nach Stans Anweisung behoben und die Datei als ...1.xml gespeichert. Als ich dann die Vorlage erneut öffnete, dieses Mal als Vorlage, und denselben Fehler beheben wollte, war der Fehler verschwunden! Ich habe diese Datei nicht verändert und dennoch keinen Fehler bei der Ausführung des Makros. Das bedeutet für mich, dass der Fehler nicht tatsächlich in der Datei, sondern in einer (versteckten) Einstellung in Excel liegt.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X