Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

OnTime-Methode schlägt fehl

Forumthread: OnTime-Methode schlägt fehl

OnTime-Methode schlägt fehl
21.11.2002 17:21:19
Konstantin
Hallo zusammen.
Sitze schon einen halben Tag an dem Problem!
Mit ((Application.OnTime variable, "funktion")) gelingt es mir zu einem bst. Zeitpunkt die Fnkt. aufzurufen, aber dies mit ((Application.OnTime earliesttime:=variable,procedure:="funktion", schedule:=False)) abzubrechen geht nicht. Die Fehlermeldung lautet: "Die OnTime Methode des Appl.-Objekts ist fehlgeschlagen."
Weis jemand, was ich falsch mache?


Anzeige

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Re: OnTime-Methode schlägt fehl
21.11.2002 17:25:04
Hajo_Zi
Hallo Konstantin

ich habe mir mal ein Beispiel geschaffen und das baue ich mir immer um. Als günstig hat sich erwiesen die Startzeit auf eine Varible zu schreiben.


' **************************************************************
' Modul: DieseArbeitsmappe Typ = Element der Mappe(Sheet, Workbook, ...)
' **************************************************************

Option Explicit

Private Sub Workbook_Open()
Zeitmakro
End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)
On Error Resume Next
Application.OnTime EarliestTime:=ET, Procedure:="Zeitmakro", Schedule:=False
End Sub


' **************************************************************
' Modul: Modul1 Typ = Allgemeines Modul
' **************************************************************

Option Explicit
Public ET As Variant

Sub Zeitmakro()
' unter Anleitung von KlauCh
ThisWorkbook.Worksheets("Tabelle1").Range("A1") = Format(Time, "hh:mm:ss")
ET = Now + TimeValue("00:00:01")
Application.OnTime ET, "Zeitmakro"
End Sub

Code eingefügt mit: Excel Code Jeanie

Gruß Hajo

Anzeige
OnTime Methode
21.11.2002 18:48:47
Konstantin
Hi, Hajo!
Danke für die schnelle Reaktion!
Bei mir klappt es immer noch nicht. Dein Bsp schon, aber(sorry, habe das Problem nicht ausführlich genug geschildert!) ich muß eine Mappe schließen, sobald kein Button in der Form 10 Minuten lang gedrückt wurde. So hatte ich bei jedem Button eingebaut:

'------------------------in der Form--------------------
Private Sub UserForm_Activate()
ET=Now + TimeValue("00:10:00")
Application.OnTime ET, "schliess"
End Sub

Private Sub CommandButton_Klick()
Call countdown_new
'...Weitere Anweis.
End Sub
'------------------------------ dann im Modul--------------
Public ET as Date

Public Sub countdown_new()
Application.OnTime _
EarliestTime:=ET, Procedure:="schliess", Schedule:=False
ET = Now + TimeValue("00:10:00")
Application.OnTime ET, "schliess"
End Sub

Public Sub schliess()
ActiveWorkbook.Close = False
End Sub

Die Mappe wird geschlossen exakt nach 10 Minuten nach dem Form-Start. Wenn ich On Error Resume Next auslasse, kommt bei Application.OnTime EarliestTime:=ET,... Die Fehlermeldung.
Ein Anfängerfehler?

Gruß Konstantin



Anzeige
noch offen
21.11.2002 19:04:45
Hajo_Zi
Hallo Konstantin

ich habe jetzt mal Dein Beispiel nachgebaut mit 10 Sekunden und es läuft


' **************************************************************
' Modul: Modul1 Typ = Allgemeines Modul
' **************************************************************

Public ET As Date

Public Sub countdown_new()
Application.OnTime EarliestTime:=ET, Procedure:="schliess", Schedule:=False
ET = Now + TimeValue("00:00:10")
Application.OnTime ET, "schliess"
End Sub

Public Sub schliess()
Unload UserForm1
ActiveWorkbook.Close False
End Sub


' **************************************************************
' Modul: UserForm1 Typ = Userform
' **************************************************************

Option Explicit

Private Sub UserForm_Activate()
ET = Now + TimeValue("00:10:00")
Application.OnTime ET, "schliess"
End Sub

Private Sub CommandButton_Click()
Call countdown_new
'...Weitere Anweis.
End Sub

Code eingefügt mit: Excel Code Jeanie

Gruß Hajo

Anzeige
Re: OnTime Methode
21.11.2002 19:10:09
Nepumuk
Hallo Konstantin,
die Anweisung zum beenden der OnTime-Anweisung kannst du dir in deinem Fall sparen. Diese Anweisung wird nur gebraucht um rekursive Aufrufe von Makros, das heißt, Makros die sich durch eine OnTime-Anweisung in regelmäßigen Abständen selbst aufrufen, zu beenden. In deinem Fall wird ein Zeitpunkt gesetzt, der, auch wenn er durch drücken der Buttons sich verändert, für die OnTime-Anweisung absolut ist. Ist die Anweisung dann abgearbeitet, ist sie nicht mehr aktiv.
Gruß
Nepumuk

Anzeige
Re: OnTime Methode
21.11.2002 19:19:15
Nepumuk
Jetzt fällt mir gerade ein, dass du die Anweisung zum beenden der OnTime-Anweisung zumindes in das Workbook_beforeclose-Ereigniss mit einer "On Error Resume Next"-Anweisung setzen solltest, da, wenn der Anwender die Datei regulär schließt, die OnTime-Anweisung noch aktiv ist und die Mappe, solange Excel geöffnet ist sich selbst wieder öffnet.
Schwerer Satz.
Gruß
Nepumuk
Anzeige
Re: OnTime Methode
21.11.2002 19:20:59
Hajo_Zi
Hallo Nepumuk

ich habe es jetzt mal getestet ohne die Anweisung zum Beenden. Das hatte aber zur Folge, falls ich zwischen durch den CommndButton Drücke wird die Userform und Datei nach der Zeit geschlossen. Aber nach einer gewissen Zeit öffnet sich die Datei wieder und wird noch mal geschloassen.

Gruß Hajo

Anzeige
Jetzt läuft es auch bei mir!!
21.11.2002 19:28:45
Konstantin
Hmm?! läüft einwandfrei in einer neuen Mappe! Ich versuche es 1:1 in die alte zu übernehmen. Vielleicht geht es endlich.
Es sollte doch nichts geben, was mit OnTime im Konflikt stehen könnte, oder?
Bestimmt ein dummer Fehler gewesen. Schade um die Zeit!

Danke für die Hilfe!
By

Anzeige
Re: OnTime Methode
21.11.2002 19:41:30
Konstantin
Danke! Der Satz war es Wert!
Gruss Konstantin
;
Anzeige

Infobox / Tutorial

OnTime-Methode in Excel VBA erfolgreich nutzen


Schritt-für-Schritt-Anleitung

  1. VBA-Editor öffnen: Drücke ALT + F11, um den Visual Basic for Applications (VBA) Editor zu öffnen.
  2. Modul erstellen: Klicke auf Einfügen > Modul, um ein neues Modul zu erstellen.
  3. Variable für den Zeitpunkt definieren: Definiere eine öffentliche Variable, um die Zeit zu speichern.
    Public ET As Date
  4. Makro für OnTime erstellen:
    • Erstelle ein Makro, das beim Öffnen der Arbeitsmappe oder der Benutzerform aufgerufen wird. Setze die OnTime-Anweisung für die geplante Ausführung.
      Private Sub UserForm_Activate()
      ET = Now + TimeValue("00:10:00") ' Setze die Zeit für 10 Minuten
      Application.OnTime ET, "schliess"
      End Sub
  5. Makro zum Schließen der Arbeitsmappe:
    • Erstelle ein weiteres Makro, das die Arbeitsmappe schließt.
      Public Sub schliess()
      ActiveWorkbook.Close False
      End Sub
  6. Fehlerbehandlung hinzufügen: Um Fehlermeldungen zu vermeiden, füge On Error Resume Next in die Subroutine ein, die die OnTime-Anweisung abbricht.

Häufige Fehler und Lösungen

  • Fehlermeldung "Die OnTime Methode des Appl.-Objekts ist fehlgeschlagen."

    • Diese Fehlermeldung tritt häufig auf, wenn der Zeitpunkt nicht korrekt gesetzt ist. Überprüfe, ob die Variable ET korrekt zugewiesen wurde.
  • Die Arbeitsmappe schließt sich unerwartet.

    • Stelle sicher, dass die Application.OnTime Anweisung nur einmal gesetzt wird. Füge Schedule:=False hinzu, um vorherige Aufrufe abzubrechen.

Alternative Methoden

  • Timer-Funktion: Anstelle der OnTime-Methode kannst du auch eine Schleife mit DoEvents und einer Timer-Funktion verwenden, um eine Verzögerung zu implementieren.
  • Excel-Funktionen: Nutze NOW() in Kombination mit Bedingungen in Excel, um zeitbasierte Aktionen manuell zu steuern.

Praktische Beispiele

Hier ist ein einfaches Beispiel, das die Anwendung der Application.OnTime Methode zeigt:

Public Sub StartTimer()
    ET = Now + TimeValue("00:00:10") ' Timer für 10 Sekunden
    Application.OnTime ET, "TimerAbgelaufen"
End Sub

Public Sub TimerAbgelaufen()
    MsgBox "Der Timer ist abgelaufen!"
End Sub

Dieses Makro zeigt eine einfache Nachricht an, wenn der Timer abgelaufen ist.


Tipps für Profis

  • Verwende Application.OnTime mit Bedacht: Bei rekursiven Aufrufen kann es leicht zu Fehlern kommen. Stelle sicher, dass du die OnTime-Anweisungen verwaltest.
  • Dokumentiere deinen Code: Füge Kommentare hinzu, um den Überblick über die Funktionen und deren Aufrufe zu behalten.
  • Teste in einer neuen Arbeitsmappe: Wenn du Probleme hast, teste deine Makros in einer neuen Excel-Datei, um Konflikte mit bestehenden Daten zu vermeiden.

FAQ: Häufige Fragen

1. Was ist die Application.OnTime Methode?
Die Application.OnTime Methode in Excel VBA wird verwendet, um ein Makro zu einem festgelegten Zeitpunkt auszuführen.

2. Wie kann ich eine geplante Ausführung abbrechen?
Um eine geplante Ausführung abzubrechen, verwende die Schedule:=False Option in der Application.OnTime Anweisung.

3. Was tun, wenn ich eine Fehlermeldung erhalte?
Überprüfe die Zuweisungen deiner Variablen und stelle sicher, dass der Zeitpunkt korrekt gesetzt ist. Verwende On Error Resume Next, um vorübergehende Fehler zu ignorieren.

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