Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1756to1760
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

Problem mit Application.OnTime

Problem mit Application.OnTime
12.05.2020 17:06:32
Enrico
Hallo miteinander,
Ich bin gerade dabei mich in die Tiefen der VBA vor zuarbeiten.
Jetzt beschäftigt mich folgendes Problem.
Ich habe eine Excel Datei die ich öffne und dann einige Daten eingebe. Wenn dies passiert ist lasse ich diese unter einem anderen Namen Speichern, weil die zuerst geöffnete Datei ohne die Daten erhalten bleiben soll.
Ab dem Zeitpunkt des speichern´s startet das Makro:

IN „Diese Arbeitsmappe“
Private Sub Workbook_AfterSave(ByVal Success As Boolean)
Call AutoSpeichernEinschaltenLF
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Call AutoSpeichernAusschaltenLF
End Sub
IN „MODUL“
Option Explicit
Dim ZeitZuSpeichernLF As Date
Sub SpeichernLF()
ThisWorkbook.Save
Call AutoSpeichernEinschaltenLF
End Sub
Sub AutoSpeichernEinschaltenLF()
ZeitZuSpeichernLF = Now + TimeSerial(0, 2, 0)  'hier Intervall einstellen (h, m, s)
Application.OnTime ZeitZuSpeichernLF, "SpeichernLF"
End Sub
Sub AutoSpeichernAusschaltenLF()
On Error Resume Next
Application.OnTime ZeitZuSpeichernLF, "SpeichernLF", , False
End Sub

Nach dem schliessen der Mappe sollte das Makro ja beendet sein. Doch solange Excel weiterhin offen ist startet die zuvor gespeicherte Datei nach Ablauf der 2 min immer wieder.
Es kann auch sein das mehr als eine Datei die dieses Makro haben bearbeitet werden. Ich habe es auch schon probiert die Varriablen jeder Datei anders zu benennen, brachte aber auch nicht den Erfolg.
Vielleicht habt ihr eine Idee wo das Problem steckt.
Oder könnt mir eine andere Lösung oder Ansatz zeigen.
Vielen Dank schon einmal.

35
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Application.OnTime nicht zurückgesetzt
12.05.2020 17:19:06
Tino
Hallo,
das ist ein Zeichen dafür das die gesetzte Application.OnTime Prozedur
vor dem schließen nicht wieder zurückgesetzt wurde und immer noch im speichert auf seine Zeit wartet.
Gruß Tino
AW: Application.OnTime nicht zurückgesetzt
12.05.2020 17:57:06
Enrico
Ja aber eigentlich wurde es ja ab dem
Workbook_BevoreClose
beendet.
Dort wird es mit der exakt gleichen Zeile wie der Start, nur mit dem Zusatz "False" beendet.
AW: Application.OnTime nicht zurückgesetzt
12.05.2020 18:05:20
Tino
Hallo,
dann denke ich, müsste im Ablauf ein Fehler sein!
Zum testen würde ich mal das On Error Resume Next raus machen und die Zeit wieder auf 0 setzen um den Fehler zu finden.
Wenn alles läuft kann man dies wieder einschalten.
Gruß Tino
Anzeige
AW: Application.OnTime nicht zurückgesetzt
12.05.2020 19:09:41
Enrico
Ich habe es mal ausprobiert. Es hat keine Auswirkung wenn ich die On Error raus nehme. Der fehler tritt nur auf wenn ich mehr als eine Datei auf diese weise starten lasse.
AW: Application.OnTime nicht zurückgesetzt
12.05.2020 19:43:18
onur
Wenn du die Datei schliesst, speicherst du sie noch mal ab (wenn die Meldung kommt, dass sie verändert wurde)?
Application.OnTime mehrfach eingeschaltet
12.05.2020 19:47:20
Tino
Hallo,
habe mal eine Testmappe aufgebaut.
Grund OnTime wird mehrfach eingeschaltet und immer mit anderen Uhrzeiten.
Versuch mit mal diesem Code im Modul.
Dim ZeitZuSpeichernLF As Date
Sub SpeichernLF()
On Error Resume Next
Application.EnableEvents = False
ThisWorkbook.Save
Application.EnableEvents = True
If Err.Number  0 Then
MsgBox Err.Description, vbCritical, "Error"
End If
Call AutoSpeichernEinschaltenLF
End Sub
Sub AutoSpeichernEinschaltenLF()
Call AutoSpeichernAusschaltenLF
ZeitZuSpeichernLF = Now + TimeSerial(0, 0, 30)  'hier Intervall einstellen (h, m, s)
Application.OnTime ZeitZuSpeichernLF, "SpeichernLF"
End Sub
Sub AutoSpeichernAusschaltenLF()
On Error Resume Next
Application.OnTime ZeitZuSpeichernLF, "SpeichernLF", , False
End Sub

Anzeige
AW: Application.OnTime mehrfach eingeschaltet
13.05.2020 17:01:22
Enrico
Habe auch das jetzt ausprobiert. Das speichert nur eine Datei und nicht mehrere wenn diese Gleichzeitig offen sind und das Makro bei beiden ausgelöst wurde.
Ich glaube ich brauche eine andere Methode.
AW: Application.OnTime nicht zurückgesetzt
12.05.2020 19:50:40
onur
Schreibe mal den Code zum Timer-Ausschalten (ohne On Error) in
Sub Workbook_Deactivate()

statt in
Sub Workbook_BeforeClose(Cancel As Boolean)

AW: Application.OnTime nicht zurückgesetzt
12.05.2020 20:22:28
Enrico
Ohne die On Error Speichert es garnicht. Ich gehe mal davon aus das die Funktion OnTime nicht bei mehreren Arbeitsmappen gleichzeitig funktioniert.
Anzeige
AW: Application.OnTime nicht zurückgesetzt
12.05.2020 20:28:19
onur
Hast du den Code denn versetzt?
AW: Application.OnTime nicht zurückgesetzt
12.05.2020 20:52:11
Enrico
Nein ich habe einfach die Vorschläge die ich bekommen haben im bestehenden Code geändert.
AW: Application.OnTime nicht zurückgesetzt
12.05.2020 20:55:12
onur
Schreibe mal den Code zum Timer-Ausschalten in
Sub Workbook_Deactivate()
statt in
Sub Workbook_BeforeClose(Cancel As Boolean)
Weil BeforeClose VOR BeforeSave ausgeführt wird (also kommt nach BeforeClose BeforeSave, wo der Timer neu gesetzt wird).
AW: Application.OnTime nicht zurückgesetzt
12.05.2020 21:07:05
Enrico
Das habe ich schon getan. Es wird nicht anders.
Gibt es noch eine andere Variante um das Umzusetzen?
Zur Erklärung: Es handelt sich um eine Art elektronische Einsatzdokumentation.
Ich öffne eine Datei = "Lagefilm" dann wird im laufe des Einsatzes eine weitere Datei zb "Messprotokoll" benötigt in der Daten eingegeben werden sollen. Die sollen aber erst nach dem ersten manuellen Speichern dann automatisch alle X Minuten gespeichert werden.
Anzeige
AW: Application.OnTime nicht zurückgesetzt
12.05.2020 21:10:11
onur
Evtl ja, aber da müsste ich mal deine Datei haben (oder entspr. Musterdatei mit dem selben Fehler).
Du hast die Frage noch nicht beantwortet:
Wenn du die Datei schliesst, speicherst du sie noch mal ab (wenn die Meldung kommt, dass sie verändert wurde)?
AW: Application.OnTime nicht zurückgesetzt
12.05.2020 21:13:18
onur
Kommt eine Fehlermeldung wenn du
On Error Resume Next
löschst?
AW: Application.OnTime nicht zurückgesetzt
12.05.2020 21:20:16
onur
Noch ne Idee:
Mach mal aus
Dim ZeitZuSpeichernLF As Date
das:
Public ZeitZuSpeichernLF As Date
AW: Teste Code aus Beitrag 7
13.05.2020 17:51:22
Enrico
Ich habe es mal ausprobiert hat aber auch keinen Erfolg gebracht. Es speichert nur eine Datei. Wenn zwei oder mehr offen sind und das Makro bei den anderen auch gestartet wird speichert es nur bei einer Datei.
kann ich nicht nachvollziehen
13.05.2020 18:08:33
Tino
Hallo,
habe mir zwei Dateien erstellt mit dem gleichen Code.
Beide habe ich im Abstand von ca. 10 Sekunden gespeichert und bei
beiden hat OnTime den Code in der entsprechenden Datei ausgeführt.
Kann nicht sagen warum es bei dir nicht geht!
Gruß Tino
AW: kann ich nicht nachvollziehen
13.05.2020 18:41:06
Enrico
Hat es auch funktioniert das der Code der jeweiligen Datei beim schließen dieser auch wieder gestoppt wurde? Oder wird dann trotzdem die Datei automatisch wieder geöffnet?
Anzeige
eben noch einmal getestet
13.05.2020 18:56:15
Tino
Hallo,
funktioniert alles wie es soll,
die Datei1 geht nicht wieder auf auch wenn Datei2 offen bleib und
das OnTime von Datei2 speichert die Datei2 auch weiterhin.
Gruß Tino
AW: eben noch einmal getestet
13.05.2020 19:19:20
Enrico
Kannst du mir deinen Code nochmal schicken? Hast du für beide Dateien den selben Code benutzt? Oder Unterschiede bei der jeweiligen Datei gemacht?
Meine Datei zum prüfen
13.05.2020 20:24:52
Enrico
Hier mal eine der Dateien. Es sind noch Verknüpfungen enthalten.
Vielleicht findest du noch was.

https:\/\/www.herber.de/bbs/user/137530.xlsm

Anzeige
AW: Meine Datei zum prüfen
13.05.2020 20:49:19
Tino
Hallo,
bin erst morgen wieder am PC.
Eigentlich ist es der Code den ich gepostet habe!
Gruß Tino
AW: Meine Datei zum prüfen
14.05.2020 06:48:21
Tino
Hallo,
Grundsätzlich funktioniert dies.
Wird aber zuvor eine Änderung in der Tabelle gemacht und die Datei geschlossen,
wird zuerst Workbook_BeforeClose ausgeführt.
Danach kommt die Meldung ob die Änderung gespeichert werden soll und dadurch wieder
Workbook_AfterSave ausgeführt und dadurch OnTime wieder aktiv!
Kann heute Mittag mal schauen ob ich eine Lösung finde!
Gruß Tino
AW: Meine Datei zum prüfen
14.05.2020 06:51:20
onur
Für alle Analphabeten:
die Lösung habe ich am 12.05.2020 19:50:40 gepostet!
Die Erklärung dazu am 12.05.2020 20:55:12!
Anzeige
AW: Meine Datei zum prüfen
14.05.2020 06:56:49
Tino
Hallo,
dann speichert dieser nicht mehr automatisch wenn inaktiv.
Bin dann raus!
Gruß Tino
AW: Meine Datei zum prüfen
14.05.2020 07:02:02
onur
Quatsch!
DeActivate wird ganz am Schluss ausgeführt, da ist BeforSave bereits ausgeführt.
Auserdem soll er ja nicht automatisch speichern, wenn "inaktiv", sondern nur nach Rückfrage.
AW: Meine Datei zum prüfen
14.05.2020 18:49:11
Enrico
Falls du meine Antwort darauf gelesen hast, ich habe es probiert hat aber auch nichts gebracht.
Und man muss nicht gleich beleidigend werden!!!!
AW: Meine Datei zum prüfen
14.05.2020 20:05:20
onur
Ich habe mir mal endlich deine Datei angeschaut. Da sind etliche Fehler drin.
Du benutzt "On Error Resume NEXT", ohne zu wissen warum und welcher Fehler auftritt.
"On Error Resume NEXT" ist kein Allheilmittel gegen schlechte Programmierung.
Der Fehler taucht nämlich auf, weil du im Sub AutoSpeichernEinschaltenLF das Folgende benutzt, das hast da nix zu suchen:
Call AutoSpeichernAusschaltenLF

Die Variable ZeitZuSpeichernLF ist aber beim ersten Start (bei der ersten Speicherung) leer und bringt die Fehlermeldung.
Das Problem mit Neustart des AutoSpeichernEinschaltenLF beim Schliessen kann man einfach verhindern, indem man eine globale Boolean-Variable (ToBeClosed) benutzt, die in Before_Close auf true gesetzt wird.
Und für das Setzen des Timers die Abfrage in After_Save:
If Not ToBeClosed Then Call AutoSpeichernEinschaltenLF
AutoSpeichernEinschaltenLF darf nur EINMAL laufen, und zwar beim ERSTEN MAL! Die anderen Male wird der Timer AUTOMATISCH weitergesetzt.
Und sei nicht wieder beleidigt!
Guckst du hier:
https:\/\/www.herber.de/bbs/user/137558.xlsm
Anzeige
AW: Meine Datei zum prüfen
15.05.2020 19:36:34
Enrico
Der Fehler muss wohl hier liegen.
Sub EinsatzBeendet()
Application.DisplayAlerts = False
If MsgBox("Willst du den Einsatz wirklich abschließen?" & vbCrLf & "Hast du den Einsatz  _
gespeichert?", vbYesNo + vbInformation, "Abfrage!!") = vbYes Then
Else
Exit Sub
End If
ThisWorkbook.Close , False
Application.DisplayAlerts = True
End Sub
Ich habe mal Code für Code ausprobiert und ab diesem tritt es auf das die Dateien wieder geöffnet werden.
AW: Meine Datei zum prüfen
15.05.2020 19:38:47
onur
Was soll das?
Liest du nicht die Antworten, die du bekommst?
Ich habe dir die Lösung als Datei gepostet!
Hast du diese auch nicht geöffnet?
AW: Meine Datei zum prüfen
15.05.2020 19:49:30
Enrico
Ja habe ich. Ich habe auch deinen Code benutzt trotz dessen war es weiterhin so.
Deshalb habe ich zwei neue Dateien gemacht (in denen ich deinen Vorschlag eingebaut habe) und habe dann einen Code eingetragen und es getestet bis bei dem der Fehler entstanden ist. Logischerweise muss es daran liegen.
AW: Meine Datei zum prüfen
15.05.2020 19:50:59
onur
Poste doch mal die neue Datei, - kann sein, dass du nicht alles korekt umgesetzt hast.
AW: Meine Datei zum prüfen
15.05.2020 19:53:22
onur
Und inzwischen teste mal meine Datei - am besten in zwei Instanzen (einfach Kopie erstellen und Original und Kopie gleichzeitig laufen lassen.
Dann kannst du sehen, dass der Code genau das macht, was er sol.

54 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige