Ich habe eine Tabelle in der stündlich Werte von einer Datenbank geholt werden (rund um die Uhr),immer um 6:00 soll ein Protkoll gedruckt werden. Es wird zu bestimmten Zeiten ein Makro gestartet, das mir die Daten holt mit:
Application.OnTime TimeValue(Zeit),„Datei.xls!Makroname“
Irgendwann ist das Makro mit den OnTime TimValue Zeiten abgelaufen und muß neu gestartet werden, dafür benutze ich wiederum ein Makro welches mein Makro mit den OnTime Zeiten neu startet(soll ja rund um die Uhr laufen). Dies führt aber dazu das mein Protokoll um 6:00 mehrmals gedruckt wird. Meine Frage ist nun, gibt es eine Möglichkeit dies ohne Makro eventuel mit einer Schleife zu bewerkstelligen. Bin mir fast sicher es gibt eine weiss nur nicht wie.
Wolfgang
Hi Wolfgang,
bin müde und habe überhaupt nicht verstanden warum da mehrmals gedruckt wird.
Wie wärs damit, ändere das Druckmakro so ab:
wenn Zelle Z1 das Dttum von heute hat exit sub
Z1 = datum von heute
Ausdrucken
Gruß
Reinhard
[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]
Hallo Wolfgang.
ich habe einmal mit der Ablaufsteuerung über den Timer experimentiert. Im Minutenmaßstab hat es funktioniert, Datumswechsel hab ich eingebaut aber nicht getestet.
Die gesamte Steuerung des Zeitablaufs erfolgt dabei in einem Modul einer Datei, von dem aus die entsprechenden Makros zum Daten-Einlesen und Protokoll-Drucken gestartet werden. Das ganze ergibt eine Endlos-Schleife in der sich die beiden Prozeduren „DatenHolenNachPlan“ und „DruckenNachPlan“ gemäß Zeitplan gegenseitig aufrufen. Dabei sollte man die Zeiten so wählen, daß nicht beide Prozeduren gleichzeitig ausgeführt werden müssen. Das ganze wird mit Starten des Makros „ZeitplanSetzen“ aktiviert. Man kann während der Timer läuft andere Aktivitäten in Excel ausführen.
Option Explicit
Public DatenHolen As String, DatenHolenAlt As String, DatenDrucken As String
Public Drucken As Boolean, DeltaZeit As String
Sub ZeitplanSetzen()
DatenHolen = InputBox("Nächste Startzeit für Holen der Daten: ", "Timer Test", Format(Now(), "hh:mm:ss"))
If DatenHolen = "" Then Exit Sub 'Eingabe abgebrochen
DeltaZeit = "01:00:00" 'Zeitabstand, in dem die Daten eingelsesen werden sollen
DatenDrucken = "06:00:00"
Drucken = True 'Drucken aktivieren
Application.OnTime TimeValue(DatenHolen), "DatenHolenNachPlan"
End Sub
Sub DatenHolenNachPlan()
'Beginn Befehlssequenz zum Einlesen der Daten
MsgBox ("Makrostarten zum Einlesen der Daten")
'Ende Befehlssequenz zum Einlesen der Daten
DatenHolen = Format(CDate(DatenHolen) + CDate(DeltaZeit), "hh:mm:ss")
If DatenHolen CDate(DatenDrucken) And Drucken = True Then
Application.OnTime TimeValue(DatenDrucken), "DruckenNachPlan"
Else
Application.OnTime TimeValue(DatenHolen), "DatenHolenNachPlan"
End If
DatenHolenAlt = DatenHolen
End Sub
Sub DruckenNachPlan()
'Beginn Befehlssequenz zum Drucken des Protokolls
MsgBox ("Makrostarten zum Drucken des Protokolls")
'Ende Befehlssequenz zum Drucken des Protokolls
Application.OnTime TimeValue(DatenHolen), "DatenHolenNachPlan"
Drucken = False ' Drucken deaktivieren
End Sub
Gruß
Franz
[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]
Hallo Franz
Danke für Deine Mühe, leider kann ich Dein Makro so nicht verwenden.
Ich habe in meiner Beschreibung des Problems nicht alles dargelegt, was ich hiermit nachholen möchte.
Die Daten werden mit dem Add-In Aspen Process Data Add-In geholt(www.aspentech.com, wenn es Dich interessiert), ich kopiere, lösche und drucke die geholten Daten mit verschiedenen Makros, welche zu unterschiedlichen Zeiten mit der Application.OnTime TimeValue(Zeit),„Datei.xls!Makroname“ ausgeführt werden. Es sind über 40 Nakros Application.OnTime TimeValue(Zeit),„Datei.xls!Makroname“ auszuführen (kopieren löschen und drucken). Klappt alles auch, außer das Drucken wie von mir beschrieben.
Ich würde ganz gern eine Schleife in dem Makro mit den Befehlen Application.OnTime TimeValue(Zeit),„Datei.xls!Makroname“ am Ende verwenden. Nur wie ??
Achso wenn ich meine Exceldatei schließe zB. um 5:00 und wieder öffne(Makro wird über auto open gestartet)funkrtioniert das Drucken ohne Probleme.
Gruß Wolfgang
[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]
Hallo Franz
Danke für Deine Mühe, leider kann ich Dein Makro so nicht
verwenden.
Ich habe in meiner Beschreibung des Problems nicht alles
dargelegt, was ich hiermit nachholen möchte.
Die Daten werden mit dem Add-In Aspen Process Data Add-In
geholt(www.aspentech.com, wenn es Dich interessiert), ich
kopiere, lösche und drucke die geholten Daten mit
verschiedenen Makros, welche zu unterschiedlichen Zeiten mit
der Application.OnTime TimeValue(Zeit),„Datei.xls!Makroname“
ausgeführt werden. Es sind über 40 Nakros Application.OnTime
TimeValue(Zeit),„Datei.xls!Makroname“ auszuführen (kopieren
löschen und drucken). Klappt alles auch, außer das Drucken wie
von mir beschrieben.
Ich würde ganz gern eine Schleife in dem Makro mit den
Befehlen Application.OnTime
TimeValue(Zeit),„Datei.xls!Makroname“ am Ende verwenden. Nur
wie ??
Achso wenn ich meine Exceldatei schließe zB. um 5:00 und
wieder öffne(Makro wird über auto open gestartet)funkrtioniert
das Drucken ohne Probleme.Gruß Wolfgang
Hallo Wolfgang,
ohne den Ablaufcode zu kennen ist Fehleranalyse natürlich schwer möglich.
Meine Vermutung:
Die OnTime-Anweisung für das Drucken der Protokolldatei wird bei der Ausführung deiner Makros mehrfach aufgerufen. EXCEL merkt sich jeden dieser Aufrufe und führt diese dann um 06:00 Uhr aus. Im folgenden kleinen Beispiel wird die Meldung1 zum eingegebenen Zeitpunkt 3 mal angezeigt.
Sub ZeitplanSetzen2()
DatenHolen = InputBox("Nächste Startzeit für Holen der Daten: ", "Timer Test", Format(Now(), "hh:mm:ss"))
If DatenHolen = "" Then Exit Sub
Application.OnTime TimeValue(DatenHolen), "Meldung1"
Application.OnTime TimeValue(DatenHolen), "Meldung1"
Application.OnTime TimeValue(DatenHolen), "Meldung1"
End Sub
Sub Meldung1()
MsgBox ("Meldung1")
End Sub
Die OnTime-Anweisungen überschreiben sich nicht, sondern werden sukzessive abgearbeitet. Das bei Dir das Drucken „einwandfrei“ funktioniert, wenn Du EXCEL bzw. die Datei um 05:00 neu startest liegt wohl daran, dass bis 06:00 Uhr die anderen Makros nur einmal ausgeführt werden und somit der Timer für das Drucken auch nur einmal gesetzt wird.
Mit dem Parameter „LatestTime“ und einer Wartepause am Ende der aufgerufenen Prozedur kannman dieses Problem umgehen. Dabei muß allerdings sichergestellt sein, dass in der Zeit zwischen Aufruf des Makros und LatesTime EXCEL nicht mit etwas anderem beschäfftigt ist, sonst verstreicht die Zeit ohne dass die Prozedur gestartet wird. Im Beispiel wird das aufgerufene Makro nach 5 Sekunden abgebrochen, wenn die Ausführung wegen der zur Zeit aktiven Prozedur nicht möglich ist. Da die aufgerufenen Prozedur am Ende der Ausführuung 10 Sekunden Wartezeit hat, wird die Prozedur insgesamt nur einmal ausgeführt.
Sub ZeitplanSetzen3()
DatenHolen = InputBox("Nächste Startzeit für Holen der Daten: ", "Timer Test", Format(Now(), "hh:mm:ss"))
If DatenHolen = "" Then Exit Sub
Application.OnTime TimeValue(DatenHolen), "Meldung1", Format(CDate(DatenHolen) + CDate("00:00:05"), "hh:mm:ss")
Application.OnTime TimeValue(DatenHolen), "Meldung1", Format(CDate(DatenHolen) + CDate("00:00:05"), "hh:mm:ss")
Application.OnTime TimeValue(DatenHolen), "Meldung1", Format(CDate(DatenHolen) + CDate("00:00:05"), "hh:mm:ss")
End Sub
Sub Meldung1()
MsgBox ("Meldung1")
Application.Wait Format(Now() + CDate("00:00:10"), "hh:mm:ss")
End Sub
Der saubere Programmierweg ist natürlich, den Ablauf der Makros mit dem Aufruf der Protokoll-Druckprozedur zu bereinigen, aber ich denke es ist OK, wenn man das ganze auch über die Zeitsteuerung regelt.
Gruß
Franz