Excel-Makro hält plötzlich an
Hallo,
seit kurzem hakt es beim Ablauf eines Makros, obwohl ich dieses Makro schon lange ohne Probleme benutze.
Nach Anstoß des VBA-Makros erscheint immer mal wieder das Panel mit folgender Meldung:
"Ausführung des Codes wurde unterbrochen"
Fortsetzen Beenden Debuggen Hilfe
Klicke ich auf "Fortsetzen" läuft das Makro weiter, kann dann aber (an einer anderen Stelle) wieder hängenbleiben oder auch komplett durchlaufen.
Klicke ich auf "Debuggen" sehe ich die Stelle(n), an denen das Makro hängenblieb, das sind dann Anweisungen wie diese:
Application.Display Alerts = True
Sheets.Add before: = Sheets("Tabelle99")
Sheets("Tabelle88").Select
also ganz normale VBA-Anweisungen.
Und, es hakt immer an andren Stellen, so dass ich davon ausgehe, dass es nicht an der Code-Zeile selbst liegt.
Klicke ich auf "Hilfe" erscheint nach langer Suche nichts, gebe ich dann in dem angebotenen Suchfenster die Fehlermeldung als Suchstring ein, findet die Hilfe nichts dazu.
Was kann da sein?
LG PG
Der VBA-Code besteht aus 1 Hauptprogramm (Steuerprogramm) und ca. 10 Subroutinen, die Schlüsselworte in einem Excel-sheet suchen und dann Werte vom Spender-Sheet ins Schreibblatt übertragen.
Windows 7
Excel 2007
3 Antworten
Kann es sich vllt um einfache Leerzeichen-Fehler handeln zu deren automatischer Behandlung mal ausreichend, mal zuwenig Speicher zur Verfügung steht?
m.W. richtig:
Application.DisplayAlerts = True (kein LZ vor Alerts)
Sheets.Add before:= Sheets("Tabelle99") (kein LZ vor = , vllt auch keins vor Sheets??-weiß ich nicht auswendig)
Sheets vllt durch eindeutiges Worksheets ersetzen, damit (automatische) Vorgabe-Suchschleife eingespart wird?
und dann such noch in der Zeile vor DispalyAlerts.
Vllt gibt es auch Nachlade-/Speicherfreimach-Probleme beim Einfügen neuer Arbeitsblätter (notwendige automatische Vergrößerung der Auslagerungsdatei)?
Schließe mal alles andere, vor allem den inet-Browswer, der braucht oft am meisten, v.a., wenn viele Tabs offen sind!
Ggf Windows und/oder xl neu starten (nur mal probeweise, damit ALLE Ressourcen dafür zur Verfügung stehen).
Da hört sich für mich so an, als ob eines der beiden Tabellenblätter nicht existiert.
Du kannst mit:
On Error Resume Next
'...
'Dein Code
'...
On Error GoTo 0
...erreichen, dass Laufzeitfehler in dem Bereich zwischen diesen beiden Zeilen ignoriert werden. Falls eines der Blätter nicht existiert oder ein anderer Fehler auftritt, wird also einfach nichts gemacht.
Damit solltest Du allerdings sehr vorsichtig umgehen, denn das ist Programmieren "mit dem Brecheisen".
Hallo Oubyi,
nein alle benötigten Tabellenblätter existieren. Und wenn ich auf "Fortsetzen" klicke, läuft das Makro ja weiter, ohne etwas auszulassen, oder einen Fehler zu machen.
Trotzdem, Danke für deinen Brecheisen-Tipp ;-)
LG PG
@Oubyi: an die einfachsten Sachen denkt man oft nicht!
Aber müsste die Meldung dann nicht heissen: ..ausserhalb des gültigen Bereichs?
@Pino: Die Fehlernummer erhältst Du, indem Du sie einer Variablen zuweist und diese dann im Debug-Modus zeigen lässt:
vor on Error Goto 0 einfügen:
Fehler1 = Err() oder Err.Number (schau dazu in der Hilfe nach)
Hallo Iamiam,
erstmal vielen Dank für deine Tipps. Und weil dieser hier am einfachsten zu realisieren ist, habe ich den gleich getestet, hier ein beispielhafter Ausschnitt.
Dim iFehler1, iFehler2 As Integer
iFehler1 = Err.Number
iFehler2 = Err()
Debug.Print "Point 004 iFehler1: " & iFehler1, "iFehler2: " & iFehler2
Application.DisplayAlerts = False
iFehler1 = Err.Number
iFehler2 = Err()
Debug.Print "Point 005 iFehler1: " & iFehler1, "iFehler2: " & iFehler2
Ergebnis im Debug-Fenster:
Point 001 iFehler1: 0 iFehler2: 0
Point 002 iFehler1: 0 iFehler2: 0
Point 003 iFehler1: 0 iFehler2: 0
Point 004 iFehler1: 0 iFehler2: 0
Point 005 iFehler1: 0 iFehler2: 0
Point 006 iFehler1: 0 iFehler2: 0
Point 007 iFehler1: 0 iFehler2: 0
Point 008 iFehler1: 0 iFehler2: 0
Point 009 iFehler1: 0 iFehler2: 0
Point 010 iFehler1: 0 iFehler2: 0
Point 011 iFehler1: 0 iFehler2: 0
Point 012 iFehler1: 0 iFehler2: 0
Point 013 iFehler1: 0 iFehler2: 0
Ich hab das Programm 10 x laufen lassen, nichts, kein Fehler mehr. Na, dann...
LG PG
Hallo Iamiam,
ich hab die Debugstellen jetzt nochmals um- und richtiggestellt:
also nach jeder Code-Zeile, bei dem das Prog. schonmal ausgestiegen ist, ein On Error Goto EndMarke reingestellt und dann nach dieser EndMarke den Ausdruck der Debug-Variablen gemacht.
Dann ist das Programm schon bei der On Error Goto-Zeile stehen geblieben.
Also ist die Ursache sicher zu viele geöffnete Programme bzw. Tabs. Wenn ich einige Programme schließe ist der Fehler weg, wenn ich zu viele Anwendungen offen habe, kommt der Fehler wieder sporadisch vor.
Du hattest damit richtig vermutet:
Nachlade-/Speicherfreimach-Probleme beim Einfügen neuer Arbeitsblätter
LG PG
Kommentiere zum Testen einmal folgende Zeile aus oder setze den Wert auf False:
'Application.Display Alerts = True
Hier auch noch die Antwort drunter, damit spätere Generationen die Antwort auch unter der dazugehörigen Frage finden.
Also ist die Ursache sicher zu viele geöffnete Programme bzw. Tabs. Wenn ich einige Programme schließe ist der Fehler weg, wenn ich zu viele Anwendungen offen habe, kommt der Fehler wieder sporadisch vor.
Du hattest damit richtig vermutet:
LG PG