Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Application.OnTime

Application.OnTime
30.08.2004 21:02:07
Franc
Da es hier im Forum nicht nach oben geschoben wird muss ich nochmal einen neuen Beitrag schreiben.
Alter: https://www.herber.de/forum/messages/477590.html
Das Problem ist gefunden ich weiss nur nicht wie ich es beheben soll.
Wenn ich
Application.OnTime Time + TimeSerial(0, 10, 0), "bild",
Schreibe öffnet er bei jedem Start ein neues Timefenster. (deswegen hatte ich dann auch soviel Meldungen)
Wenn ich
erst
Application.OnTime Time + TimeSerial(0, 10, 0), "bild",
und dann
Application.OnTime Time + TimeSerial(0, 10, 0), "bild", False
schreibe dann schließt er das alte und nimmt daher immer nur 1.
Jetzt gibbet es aber ein Problem.
wenn ich jetzt
Application.OnTime Time + TimeSerial(0, 10, 0), "bild", False
starte dann gibts natürlich eine Fehlermeldung. (weil kein Zeitfenster mehr offen ist)
Gibt es eine Option womit ich prüfen kann, ob Application.OnTime bereits gestartet wurde? Oder ich alle offenen Zeitfenster schließen kann?
Ich kann in meiner Tabelle nicht 100%-ig festlegen ob gerade ein Zeitfenster offen ist oder nicht.
Anzeige

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
schau nochmal unten nach oT
mealone
AW: Application.OnTime
30.08.2004 22:43:35
Philipp
Hallo Franc
Das Problem liegt an der doppelten Verwendung von Time. Beim Löschen der geplanten Prozedurausführung (d.h. Scheduled-Parameter=False) muss der gleiche Zeitpunkt angegeben werden, der beim Hinzufügen der geplanten Ausführung verwendet wurde. Wenn man das nicht macht und eine Sekunde später (oder mehr) versucht, die geplante Ausführung zu löschen, erscheint der Laufzeitfehler 1004. Der Fehler erscheint jedoch nicht, weil kein Zeitfenster mehr offen ist sondern weil die angegebene Zeit falsch ist. Der ursprünglich verwendete Zeitpunkt muss daher in einer öffentlichen Variable festgehalten werden.
Hier ein Beispiel:
Dim varTime As Variant

Sub SetTimer()
varTime = Time + TimeSerial(0, 10, 0)
Application.OnTime varTime, "DoIt"
End Sub


Sub KillTimer()
Application.OnTime varTime, "DoIt", , False
End Sub


Sub DoIt()
MsgBox "Hallo OnTime!", vbInformation
End Sub

Eine Option zum Prüfen, ob OnTime bereits ausgeführt wurde, gibt es nicht. Wenn man jedoch die Codezeile "Application.OnTime varTime, "DoIt", , False" ausführt und es tritt der Laufzeitfehler 1004 auf, so weiss man, dass diese geplante Prozedurausführung entweder schon gelaufen ist oder bereits gelöscht wurde.
Gruss
Philipp
¦¦¦ xlam - Excel and more!
¦¦¦ http://195.186.84.74/index.htm
Anzeige
AW: Application.OnTime
Franc
thx das funktioniert.
Die Fehlermeldungen umgehe ich mit
On Error GoTo ende
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige

Infobox / Tutorial

Anwendung von Application.OnTime in Excel VBA


Schritt-für-Schritt-Anleitung

Um die Application.OnTime Methode in Excel VBA effektiv zu nutzen, folge diesen Schritten:

  1. Öffne den VBA-Editor: Drücke ALT + F11 in Excel.

  2. Einfügen eines Moduls: Klicke mit der rechten Maustaste auf „VBAProject (DeineDatei.xlsx)“ und wähle „Einfügen“ > „Modul“.

  3. Code eingeben: Verwende den folgenden Code, um einen Timer zu setzen:

    Dim varTime As Variant
    
    Sub SetTimer()
       varTime = Now + TimeValue("00:10:00") ' Setzt den Timer auf 10 Minuten
       Application.OnTime varTime, "DoIt"
    End Sub
    
    Sub KillTimer()
       On Error Resume Next
       Application.OnTime varTime, "DoIt", , False
    End Sub
    
    Sub DoIt()
       MsgBox "Hallo OnTime!", vbInformation
    End Sub
  4. Timer starten: Führe die SetTimer Prozedur aus, um den Timer zu aktivieren.

  5. Timer stoppen: Um den Timer zu stoppen, führe die KillTimer Prozedur aus.


Häufige Fehler und Lösungen

Ein häufiger Fehler beim Arbeiten mit Application.OnTime in VBA ist der Laufzeitfehler 1004. Dieser tritt auf, wenn der Zeitpunkt für das Löschen eines Timers nicht mit dem ursprünglichen Zeitpunkt übereinstimmt.

Lösung: Halte den ursprünglichen Zeitpunkt in einer öffentlichen Variablen fest, um ihn korrekt verwenden zu können.

Dim varTime As Variant ' öffentliche Variable für den Zeitpunkt

Wenn du versuchst, einen Timer zu löschen, der nicht gesetzt wurde, verwende On Error Resume Next, um die Fehlermeldung zu unterdrücken.


Alternative Methoden

Falls Application.OnTime nicht deinen Anforderungen entspricht, kannst du auch die Windows API verwenden oder auf Schleifen zurückgreifen. Eine einfache Alternative wäre eine Endlosschleife mit DoEvents, um die Anwendung nicht einfrieren zu lassen. Beachte jedoch, dass dies die Performance beeinträchtigen kann.

Sub LoopMethod()
    Do While True
        ' Deine Aktionen hier
        DoEvents
    Loop
End Sub

Praktische Beispiele

Hier sind einige Beispiele, wie du Application.OnTime in deinen Projekten nutzen kannst:

  1. Regelmäßige Datenaktualisierung: Setze einen Timer, der alle 5 Minuten eine Prozedur ausführt, um Daten zu aktualisieren.

    Sub StartDataUpdate()
       varTime = Now + TimeValue("00:05:00")
       Application.OnTime varTime, "UpdateData"
    End Sub
  2. Benachrichtigungssystem: Erstelle ein System, das dich alle 10 Minuten mit einer Nachricht erinnert.

    Sub Reminder()
       MsgBox "Zeit für eine Pause!", vbInformation
       SetTimer ' Timer für die nächste Erinnerung setzen
    End Sub

Tipps für Profis

  • Halte deine Variablen gut organisiert und dokumentiert, um die Wartbarkeit deines Codes zu verbessern.
  • Teste deinen Code regelmäßig, um sicherzustellen, dass alles wie gewünscht funktioniert, insbesondere beim Umgang mit Application.OnTime.
  • Verwende Debug.Print, um den Status deiner Variablen während der Ausführung zu überwachen.

FAQ: Häufige Fragen

1. Wie kann ich überprüfen, ob ein Timer bereits gesetzt wurde?
Es gibt keine direkte Methode, um dies zu überprüfen. Du kannst jedoch den Laufzeitfehler 1004 abfangen, um festzustellen, ob der Timer bereits gelöscht oder ausgeführt wurde.

2. Was passiert, wenn ich den Timer nicht lösche?
Wenn der Timer nicht gelöscht wird, könnte die Prozedur mehrmals ausgeführt werden, was zu unerwartetem Verhalten und möglicherweise Fehlern führen kann. Stelle sicher, dass du den Timer regelmäßig überprüfst und bei Bedarf löschst.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige