Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
Anzeige
Archiv - Navigation
1708to1712
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

Timer wieder anhalten - wie ?

Timer wieder anhalten - wie ?
22.08.2019 14:43:44
Johannes
Hallo Zusammen,
ich habe einen Timer (Start über eine Schaltfläche), der mir alle 30 Sekunden einen Datensatz einliest - klappt auch.
Was nicht klappt ist den Timer wieder zu stoppen - irgendwie habe ich einen Konten im Hirn und würde mich über Eure Hilfe sehr freuen.
Hier der Code des Timers:
Sub Intervall()
Dim NextTime As Date
'Zeitintervall festlegen, hier 0,5 Minuten
NextTime = Now + TimeValue("00:00:30")
Application.OnTime NextTime, "Intervall"
Call Lesen    'Aufruf der BDE Daten lesen
End Sub
Vielen Dank schonmal
Gruß
Johannes

13
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Timer wieder anhalten - wie ?
22.08.2019 14:46:18
Daniel
Hi
hast du schon mal in der Excelhilfe zu Application.Ontime nachgelesen ?
da stehts beschrieben drin mit Beispiel.
einfach den Cursor auf den Befehl setzten und F1 drücken, da werden sie auch geholfen.
Gruß Daniel
AW: Timer wieder anhalten - wie ?
22.08.2019 15:04:29
Johannes
HAllo Daniel,
F1 hilft mir hier leider nicht.
Application.OnTime EarliestTime:=TimeValue("00:00:05"), _
Procedure:="Intervall", Schedule:=False
führt zu einer Fehlermeldung ... Methode fehlgeschlagen ...
Gruß
Johannes
AW: Timer wieder anhalten - wie ?
22.08.2019 15:20:25
Daniel
HI
du musst die selbe Zeit eintragen wie beim Aufruf.
der Aufruf wird mit Makroname und Startzeit in Excel hinterlegt (du kannst auch das selbe Makro mehrfach mit unterschiedlichen Zeiten aufrufen, und da muss man ja wissen, welcher zurückgenommen werden muss).
dazu sollte man die Startzeit in eine Projektweit gültigen Variable sichern, dann kann man sie in allen Makros der Datei verwenden.
hierzu wird die Variable NextTime in einem allgemeinen Modul oberhalb der Makros deklariert:
Option  Explict
Public NextTime as Date
dann kann diese Variable in allen Makros verwendet werden.
in den Markos selbst darf diese Variable dann nicht mehr deklariert werden.
Gruß Daniel
Anzeige
AW: Timer wieder anhalten - wie ?
22.08.2019 15:39:32
Johannes
Hallo Daniel,
der timer sitzt in einer Schleife, die alle 30 Sekunden erneut über den Call die BDE Daten liest. Daher kann ich doch keine Endzeit angeben, wie in der Hilfe angegeben:
Application.OnTime EarliestTime:=TimeValue("17:00:00"), _
Procedure:="my_Procedure", Schedule:=False
Ich kenne doch den Zeitpunkt nicht an dem der User die periodische Aktualisierung beenden will.
"du musst die selbe Zeit eintragen wie beim Aufruf.
der Aufruf wird mit Makroname und Startzeit in Excel hinterlegt .."

Gruß
Johannes
Die Online Hilfe hilft mir kaum ...
22.08.2019 16:03:59
mmat
Hallo,
ich fand die Online-Hilfe in dem Zusammenhang nicht wirklich hilfreich
So würde das lösen:
Option Explicit
Dim TimerRunning As Long
Sub StartTimer()
TimerRunning = 1
Intervall
End Sub
Sub StopTimer()
TimerRunning = 0
End Sub
Sub Intervall()
Dim NextTime As Date
If TimerRunning  1 Then Exit Sub
'Zeitintervall festlegen, hier 0,5 Minuten
NextTime = Now + TimeValue("00:00:30")
Application.OnTime NextTime, "Intervall"
Call Lesen    'Aufruf der BDE Daten lesen
End Sub
vg, MM
Anzeige
Danke - das klappt gut ... owT
22.08.2019 16:24:52
Johannes
.
NEIN das klappt NICHT gut...
23.08.2019 09:15:37
EtoPHG
Hallo Johannes & MM
Das ist leider wieder einmal ein ONTIME-Code Vorschlag der zu Fehler führen kann.
Der Beweis ist in dieser Beispielmappe (Falsches und richtiges Ontime) angetreten.
Warum das so ist: Die OnTime-Methode ist ein asynchroner Aufruf der Procedure. Jeder Aufruf der Methode wird in eine interne XL-Queue geschrieben und je nach Startzeit gestartet. Es können auch mehrere Aufrufe verschiedener Prozeduren in dieser Queue stehen. Nur ein Aufruf der Methode mit dem Parametern Schedule:=False und der EarliestTime:=Startzeit löschen einen Eintrag aus dieser Queue. Wird ein Aufruf vor dem Schliessen der Mappe nicht gelöscht, was bei MM's Code der Fall ist, wird sie automatisch wieder zur Startzeit geöffnet, solange Excel läuft und die Queue noch Einträge enthält.
Gruess Hansueli
Anzeige
Ach was
23.08.2019 12:58:50
mmat
Hallo Hansueli,
deine Bedenken, dass aus einer nicht bereinigten Queue Ungemach drohen könnte, in allen Ehren.
Doch scheint mir der Fall von Johannes ein relativ einfach gelagerter zu sein, und wenn er diese Kleinigkeit beachtet (d. H. nach dem Stop nochmal 30 Sec. wartet), sollte es eigentlich problemfrei funktionieren.
vg, MM
Du kannst also deinen Fehler nicht nachvollziehen?
23.08.2019 13:19:19
EtoPHG
Hallo,
Du musst also dem Benutzer mitteilen, dass er nach der Auslösung des Stopps mindestens das noch Intervall abwarten soll, bevor er die Mappe schliesst? Das nenne ich keine Lösung, sondern einen fertigen Murks!
Niemand möchte mit solcher Software arbeiten!
Gruess Hansueli
Anzeige
Eigentlich kann es keinen weiteren ...
23.08.2019 13:44:40
mmat
... Event in der Queue geben, zumindest in diesem Fall. Es sei denn es liegen Umstände vor, die verhindern, das die Routine innerhalb der 30 Sek. abgearbeitet wird. Dann ist aber das Gesamtkonzept faul.
Einigen wir uns darauf, dass wir uns uneinig sind?
vg, MM
Nein, wir sind uns nicht uneinig...
23.08.2019 13:51:32
EtoPHG
denn was falsch ist, ist und bleibt falsch.
Was willst du mit Eigentlich kann es keinen weiteren Event in der Queue geben sagen?
Dadurch löst sich der Fehler nicht auf!
Was für ein Gesamtkonzept? Dein Code ist nun mal für kein! Konzept, das mit OnTime arbeitet geeignet!
Gruess Hansueli
AW: Timer wieder anhalten - wie ?
22.08.2019 16:04:17
Daniel
doch kennst du.
hier: NextTime = Now + TimeValue("00:00:30")
speichterst du dir den aktuellen Wert in einer Variablen!!!!!!
du musst nur diese Variable projektweit gültig bzw "globlal" anlegen, damit du sie dann auch in den anderen Makros verwenden kannst, wenn du den letzten Aufruf rückgängig machen willst.
wenn du das nicht versteht, dann such mal ein bisschen im Archiv. es sollten sich genügend Codebeispiele finden lassen, in denen das gezeigt wird. ich muss da jetzt kein weiteres hinzufügen.
gruß daniel
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige