Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1856to1860
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Laufzeitfehler 1004 nach langer Laufzeit

Laufzeitfehler 1004 nach langer Laufzeit
30.11.2021 17:59:32
Jan
Hallo Leute,
ich habe mithilfe von VBA ein Diagramm dazu gebracht sich wie eine Uhr zu verhalten.
Es gibt für jeden Zeiger 2 Punkte, dessen Werte sich jede Sekunde auf die jetzige Zeit anpassen.
Es läuft an sich sehr gut, jedoch habe ich das Problem, dass nach längerer Laufzeit d. h. nach mehreren Stunden plötzlich dieser Error auftaucht:
Laufzeitfehler '1004':
Anwendungs- oder objektdefinierter Fehler

Ich habe mich schon einige Zeit mit dem Problem beschäftigt, aber ich kann einfach nicht herausfinden, woher der Fehler stammt.
Hier ist ein Link zu einer Beispielmappe:
https://www.herber.de/bbs/user/149492.xlsm
Es wäre sehr nett, wenn mir hierbei jemand helfen könnte.

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Laufzeitfehler 1004 nach langer Laufzeit
30.11.2021 18:14:34
Daniel
braucht man dafür aufwendigen Code ?
rechne per Formel Stunde und Minute (und ggf auch Sekunde) in X-Y-Koordinaten um (müsste ein bisschen Sinus und Cosinus sein)
mach damit zwei Datenreihen mit jeweils zwei Datenpunkten (einer ist immer der 0-Punkt).
dann musst du nur noch ein Makro schreiben, welches die Formeln neu berechnen lässt (Application.Calculate) und sich dann im Minuten- oder Sekundentakt selbst aufruft (Application.Ontime)
also viel Code brauchts da nicht.
Gruß Daniel
AW: Laufzeitfehler 1004 nach langer Laufzeit
01.12.2021 10:18:14
Jan
Hi Daniel
Es würde natürlich funktionieren, wenn man mit Formeln arbeitet, aber ich wollte, dass man für diese Uhr nur ein Makro braucht, sodass die Mappe etwas schöner bleibt für das Bearbeiten durch andere.
Abgesehen davon habe ich den Code ja schon geschrieben und es funktioniert auch so wie gewollt, bis auf den einen Fehler, der erst nach längerer Zeit auftaucht.
Gruß Jan
Anzeige
AW: Laufzeitfehler 1004 nach langer Laufzeit
30.11.2021 18:23:42
ChrisL
Hi Jan
Ein paar spontane Ideen:
- Rechner fällt in den Stand-By/Sleep Modus
- Mehrere OnTime gleichzeitig gestartet
- Andere Prozesse lasten den Rechner 100 % aus z.B. geplante Hintergrundtasks/-queries
- Eine andere Datei stört den Prozess z.B. mit End-Befehl
Alles nur wilde Spekulationen und teils weit hergeholt. Ich habe auch nicht geprüft ob z.B. ein End-Befehl reinfunken kann oder nicht.
Wenn alles stundenlang ohne Problem läuft, dann wird es wohl nicht am Makro liegen sondern irgendwie am Drumrum. Vielleicht erkennst du ein Muster z.B. was du am machen bist, wenn der Fehler auftritt.
cu
Chris
Anzeige
AW: Laufzeitfehler 1004 nach langer Laufzeit
01.12.2021 10:08:45
Jan
Hi Chris
Danke für deine Ideen.
Der Rechner ist nicht im Stand-By Modus, wenn der Fehler auftaucht.
Dass der PC durch andere Anwendungen ausgelastet wird, denke ich unwahrscheinlich, da der PC keine aufwendigen Prozesse auszuführen hat und es sollte auch keine anderen Dateien geben, die den Prozess stören können.
Dass mehrere OnTime gleichzeitig gestartet werden, ist möglich, aber wieso würde das einen Fehler auslösen?
Das einzige Muster, das ich erkennen kann, ist, dass der Fehler nur auftaucht, wenn die Datei lange offen ist.
Was ich am PC mache, ändert sich generell nicht und mir fällt auch keine besondere Situation auf, wenn ich dem Fehler begegne.
Gruß Jan
Anzeige
AW: Laufzeitfehler 1004 nach langer Laufzeit
01.12.2021 13:39:19
ChrisL
Hi
Dass mehrere OnTime gleichzeitig gestartet werden, ist möglich, aber wieso würde das einen Fehler auslösen?
Zugegeben, ich konnte spontan auch keinen Fehler provozieren. War nur so ein Gedanke, wenn z.B. zwei identische OnTime laufen und einer der beiden OnTime mit False abgebrochen wird und der andere OnTime auslöst obwohl im Hintergrund abgebrochen. Irgendwie sowas :)
Einen "Random Error" kann man schlecht rekonstruieren und darum schlecht beheben. Ich sehe deshalb wenig Chancen auf eine Lösung, solange kein Muster erkennbar ist.
Eine Frage habe ich dann doch noch betr. folgender Zeile:

If DieseArbeitsmappe.workbookClosed = False Then
WorkbookClosed lese ich zum ersten mal und löst bei mir einen Kompilierungsfehler aus. Workbook klein geschrieben deutet auch darauf hin, dass es kein Schlüsselbegriff ist. Mir kommt die Zeile suspekt vor.
Wie kann die Zeile bei dir laufen bzw. steckt da noch etwas anderes dahinter, was man in der Musterdatei nicht sieht?
cu
Chris
Anzeige
AW: Laufzeitfehler 1004 nach langer Laufzeit
01.12.2021 14:34:52
Jan
Hi
workbookClosed ist eine Variable, die in DieseArbeitsmappe deklariert wird.
Das ist auch so in der Datei enthalten, die ich hochgeladen habe.
Der Code darin sieht so aus:

Public workbookClosed As Boolean
Private Sub Workbook_Open()
workbookClosed = False
Clock
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
On Error Resume Next
workbookClosed = True
Application.OnTime Modul1.runTime, "Clock", , False
End Sub
Sonst habe auch nichts, was mit dieser Datei interagiert.
Du hast recht, dass das Problem schwer zu beheben ist. Ich kann mir ja nicht mal sicher sein es behoben zu haben, wenn ich was Neues versuche.
Ich werde nochmal versuchen, mit On Error statements das Problem irgendwie zu umgehen.
Gruß Jan
Anzeige
AW: Laufzeitfehler 1004 nach langer Laufzeit
01.12.2021 14:41:48
ChrisL
Hi
Mir fällt auch nichts mehr ein, ich lasse offen.
Die Variable habe ich übersehen, sorry. Ich schreibe i.d.R. nur
If PublicVariable = False Then
ohne DieseArbeitsmappe. Aber scheint ja beides zu funktionieren, somit irrelevant.
cu
Chris
AW: Laufzeitfehler 1004 nach langer Laufzeit
01.12.2021 00:10:14
Piet
Hallo
ich denke die einfachste Abhilfe ist im Code hinter Public Sub den Befehl einbauen - On Error Resume Next
Im Fehlerfall wird dann mal 1 Seknde geschlabbert, aber wenn stört das?
mfg Piet
AW: Laufzeitfehler 1004 nach langer Laufzeit
01.12.2021 09:34:40
Jan
Hi Piet
ich hatte schonmal probiert mit On Error Resume Next den Fehler zu umgehen, aber das hat nichts geändert.
Beim debuggen habe ich herausgefunden, dass auch wenn eine Zeile übersprungen wird, der Fehler einfach in einer anderen auftaucht.
Die Werte der Variablen waren dabei auch nicht ungewöhnlich.
Als ich in einer neuen Mappe denselben Code mit den Werten zu Zeit des Fehler eingegeben habe ist es problemlos gelaufen.
Gruß Jan
Anzeige
AW: Laufzeitfehler 1004 nach langer Laufzeit
01.12.2021 15:29:27
Daniel
Hi
da wir ja jetzt nicht mehrere Stunden warten können, bis der Fehler auftritt (bzw du wahrscheinlich nicht bereit bist, uns diese Zeit die wir dann für dich verwenden angemessen zu vergüten), solltest du uns mitteilen:
a) in welcher Programmzeile tritt der Fehler auf
b) wenn der Fehler auftritt, welchen Wert haben die in der Fehlerverursachenden Programmzeile Variablen und Zellberzüge (bei Objektvariablen, welche Objekte sind der Variable zugeordnet.
Ansonsten erscheint mir der Rückruf des letzen OnTimes beim Schließen etwas unsauber.
sollte hier nicht folgendes ausreichen:

Public Sub Clock()
runTime = Now + TimeValue("00:00:01")
Application.OnTime runTime, "Clock"
End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)
If Modul1.runTime > Now Then Application.OnTime Modul1.runTime, "Clock", , False
End Sub
Solange du noch auf der Fehlersuche bist, solltest du alle ON ERRORs möglichst vermeiden und lieber bekannte mögliche Fehlerursachen vorher abfragen, so dass ein ON ERROR im Normalfall nicht notwendig ist.
Bei jedem ON ERROR-Sprung gehen die Informationen, die ich oben genannt habe, verloren und du hast keinen Hinweis auf die Fehlerursache.
Es drüfte zwar nichts mit dem Fehler zu tun haben, aber ich würde nur die Variabeln als global gültig (also oberhalb des Makros deklarieren), die in mehreren unabhängigen Makros benötigst und alles was nur in einem Makro benötigt wird, wird auch in diesem Makro deklariert.
das wäre in deinem Fall nur das Public runTime As Date, was global benötigt wird, der Rest sollte im Makro selbst deklariert werden.
der Unterschied ist, dass Excel die im Makro deklarierten Variablen bei Makroende wieder löscht, also quasi aufräumt.
globale Variablen bleiben im Speicher erhalten und belegen diesen permanent.
noch ein Punkt:
du arbeitest nicht mit Option Explicit.
Das sollte man aber auf jeden fall machen, weil ohne Option Explicit und die Notwendigkeit zur Variablendeklaration bekommst du keinen Hinweis, wenn du dich mal bei einer Variable vertippt hast, weil dann sofort eine neue leere Variable angelegt und verwendet wird.
Solche Fehler fallen dann oft nicht oder erst sehr spät auf (durch fehlerhafte Ergenisse) und sind schwer zu finden.
Daher immer Option Explicit verwenden, mehr zu dem Thema hier: https://online-excel.de/excel/singsel_vba.php?f=4
Gruß Daniel
Anzeige
AW: Laufzeitfehler 1004 nach langer Laufzeit
02.12.2021 14:36:37
Jan
Hi
danke für deine vielen Tipps.
Der Error ist bei mir nun nochmal aufgetreten in dieser Zeile:

ThisWorkbook.Worksheets("ZEITPLAN").ChartObjects("ClockChart").Chart.SeriesCollection("Sekunde").XValues = "={" & Replace(CStr(xy), ",", ".") & "," & Replace(CStr(xS), ",", ".") & "}"
Die relevanten Variablen:
xy = 0,75
xS = 0,835763572462326
Wenn ich beim Debuggen die Zeile in einen Kommentar ändere, entsteht der Error stattdessen in der nächsten Zeile und in jeder Zeile, die etwas an den XValues oder Values ändert.
Auch, wenn ich das Makro komplett durchlaufen lasse und mit neuen Zeitangaben wiederholen lasse, tritt der Fehler weiterhin auf.
Mir sieht es so aus, als spielen die Variablen keine Rolle, sondern gibt es ein Problem mit der Angabe des Diagramms.
Wenn ich das SeriesCollection Objekt einer Variable zuweise, hat die Variable aber alle korrekten Werte von XValues und Values.
Der Fehler kommt aber weiterhin auf.
So sieht das dann bei mir aus:

Set sObj = ThisWorkbook.Worksheets("ZEITPLAN").ChartObjects("ClockChart").Chart.SeriesCollection("Sekunde")
sObj.XValues = "={" & Replace(CStr(xy), ",", ".") & "," & Replace(CStr(xS), ",", ".") & "}"
Ich hatte die Datei übrigens nur im Hintergrund laufen lassen bis der Fehler aufgetaucht ist.
Gruß Jan
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige