PDA

Vollständige Version anzeigen : Zeitsteuerung (Application.OnTime) stoppen


messias
19.02.2008, 09:48
Hallo,

ich frage über VBA mit Application.OnTime alle 5 Minuten ab ob die Mappe geschlossen werden kann.

Wenn ich diese Funktion in Tabelle A laufen lasse und habe noch eine Tabelle B geöffnet, schließe dann Tabelle A (in dem das Macro läuft) wieder kommt die Abfrage trotzdem noch alle 5 Minuten.

Kann mann die Funktion beim schließen der Tabelle A stoppen?

Gruß

Holger

jinx
19.02.2008, 10:03
<font size="2" face="Century Gothic">Moin, Holger,

das Makro läuft solange, bis Excel geschlossen wird, wenn nicht vorher der Stopp-Befehl kommt. ;)

Ansatz für den Code zum Stoppen siehe in Tabelle alle 10 Sekunden sortieren (http://www.herber.de/mailing/212903h.htm), Ereignis wäre das Workbook_BeforeClose- bzw. Worksheet_DeactivateEreignis, wenn ich den Zusammenhang richtig deute (bei mir laufen Mappen statt Tabellen, auch wenn die Mappen meist per Voreinstellung nur eine Tabelle umfassen)...</font>

IngGi
19.02.2008, 10:10
Hallo Holger,

dafür musst du den OnTime-Aufruf exakt wiederholen und zusätzlich den Parameter "Schedule" auf "False" setzen. Und das Ganze setzt du in eine BeforeClose-Makro im Codemodul der Arbeitsmappe, also zum Beispiel:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Application.OnTime EarliestTime:=Now + TimeValue("00:05:00"), Procedure:="Makroname", Schedule:=False
End Sub
Gruß Ingolf

messias
19.02.2008, 11:10
Hallo,

ich bekomme immer die Meldung "Laufzeitfehler '1004' Die Methode 'On Time' für das Objekt'_Application' ist fehlgeschlagen"
Was mach ich falsch? :mad:

Gibt es den Befehl "Private Sub Workbook_BeforeClose(Cancel As Boolean)" auch für ein Modul ?

Gruß


Holger

jinx
19.02.2008, 11:16
<font size="2" face="Century Gothic">Moin, Holger,

nein, der Code gehört in DieseArbeitsmappe - und ja (siehe Beispiel Herber, dort wird der Aufruf des Makros von BeforeClose ausgelöst)...</font>

messias
19.02.2008, 11:56
Also ich habs noch mal versucht bekomme aber immer die Fehlermeldung!

Ich rufe mit

Application.OnTime Now + TimeSerial(0, 1, 0), "Zeigen", False

die Prozedur auf und will sie mit

Application.OnTime Now + TimeSerial(0, 1, 0), "Zeigen", False, False

beenden. Aber wie gesagt es kommt nur eine Fehlermeldung.

:confused: Oder liegt es darin das "Zeigen" ein Modul ist?

jinx
19.02.2008, 12:10
<font size="2" face="Century Gothic">Moin, Holger,,

Du rufst mit dem Stopp-Code das makro auf? Du hast den Bundestrojaner nicht richtig installiert - ich kann nicht auf Deine Daten sehen. Vielleicht vergleichst Du Deinen Code bitte einmal mit dem verlinkten Beitrag, ich kann es zur Zeit nicht. </font>

messias
19.02.2008, 12:14
So habe das Beispiel verglichen, mache es genau so.

Habe es auch kopiert und ausprobiert, bekomme aber beim starten den Fehler
"1004 Anwendungs- oder objektdefinierter Fehler"

... bin am verzweifeln!

jinx
19.02.2008, 12:21
<font size="2" face="Century Gothic">Moin, Holger,

nicht verzweifeln - das ist Excel nicht wert... ;)

Magst Du mir bitte Deine Mappe mal an meine Mailadresse schicken (jinx at ms-office-forum.net) oder anhängen?</font>

messias
19.02.2008, 12:44
Ist unterwegs zu dir!

Styrkar
19.02.2008, 13:28
Hi,

wie IngGi schon geschrieben hat mußt du zum Abbrechen den Aufruf exakt wiederholen und dabei Schedule auf False setzen.
Du wiederholst deinen Aufruft aber nicht exakt:

Application.OnTime Now + TimeSerial(0, 1, 0), "Zeigen", False

die Prozedur auf und will sie mit

Application.OnTime Now + TimeSerial(0, 1, 0), "Zeigen", False, False
Now ist variabel, in deinem Fall funktioniert der 2te Aufruf nur in der gleichen Sekunde, danach gibts den Fehler da die Zeit nicht mehr stimmt.

Wenn du OnTime abbrechen willst mußt du die Zeit speichern:
Option Explicit
Public NextTime As Date

Sub Start()
NextTime = Now + TimeSerial(0, 1, 0)
Application.OnTime NextTime, "Test", , True
End Sub

Sub Ende()
Application.OnTime NextTime, "Test", , False
End Sub

jinx
19.02.2008, 13:31
<font size="2" face="Century Gothic">Moin, Holger,

Du kannst meines Wissens nur einen Aufruf für OnTime haben - entweder Schließen der UF wegen Untätigkeit oder Aufruf Makro - auch die Vermengung Auto_Open und Workbook_Open irritiert mich (genauso wie Auto_Clise und Workbook_BeforeClose)...</font>

messias
19.02.2008, 14:15
Also der Uhrsprung meiner Zeitsteuerung habe ich unter

http://www.excel-vba.de/dateien/excelbeenden.zip

gefunden. Könnt ihr mal da rein gucken, wenn es damit klappt müsste
es bei mir auch klappen.... tut es aber nicht.

Gruß

Holger

IngGi
19.02.2008, 15:06
Hallo Holger,

wenn du für alle drei OnTime-Makros jeweils eine globale Variable für die Zeit deklarierst und die OnTime-Zeit in diese Variablen einstellst und dann noch eine BeforeClose-Prozedur in das Codemodul der Arbeitsmappe schreibst, in der du alle 3 OnTime-Aufrufe beendest, dann sollte es klappen. Bei mir funktioniert das jedenfalls. Siehe angehängte Mappe.

Gruß Ingolf

messias
19.02.2008, 16:49
:winner: Es klappt :hands:

jinx und IngGi vielen Dank für eire Hilfe ! :winken:

:top: