Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1864to1868
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

Makro automatisiert starten

Makro automatisiert starten
13.01.2022 07:40:44
Christian
Hallo,
ich wollte mal fragen, ob ihr eine Idee habt bzw. mir helfen könnt mein Projekt in die Tat umzusetzen.
Mein Ziel ist es, einen Tag lang, alle 5 Minuten die Benzinpreise in meiner Umgebung zu erfassen und die Daten zur jeweils günstigsten Tankstelle aufzulisten um herauszufinden, wann Tanken bei mir am Günstigsten ist.
Was ich bereits habe:
1. alle Formeln um die günstigste Tankstelle zu berechnen (Tabelle1)
2. ein Makro, welches die aktuellen Tankstellendaten aus dem Internet holt (Tabelle2)
3. eine Liste, die dann jetzt noch gefüllt werden muss (Tabelle3)
https://www.herber.de/bbs/user/150364.xlsx
Wie ihr seht, das Makro (Name: Benzinpreise) fehlt, das ist Absicht, weil es die exakten Koordinaten meines Hauses beinhaltet, ich hoffe ihr habt da Verständnis. Die Koordinaten zu verfälschen würde keinen Sinn machen, da dann die Daten für falsche, nicht in der Tabelle vorhandenen Tankstellen heruntergeladen würden.
Was ich noch benötige und da brauche ich jetzt eure Hilfe.
1. Ich würde gerne wenn ich abends um ich sag einfah mal 22:30 ins Bett gehe Excel geöffnet lassen und dann hätte ich gerne dass ab 0 Uhr alle 5 Minuten das Makro Benzinpreise ausgeführt wird, 288mal bis 23:55 am Folgetag.
2. und das jeweils nach dem Ausführen die Einträge in Tabelle3 gemacht werden.
Ist das irgendwie umsetzbar?
Danke
Christian

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

Betreff
Datum
Anwender
Anzeige
AW: Makro automatisiert starten
13.01.2022 16:12:07
ChrisL
Hi Christian
Bitte bei Bedarf die Frage wieder auf offen stellen. Ich möchte dir lediglich ein paar allgemeine Hinweise geben.
Brauchst du die Daten wirklich im 5min. Takt obwohl du schläfst? Wer geht denn dann tanken? :)
Hier der Ansatz für die Wiederholung:

Sub Makro1()
Call Aktualisierung
' Kopiermakro
Dim ws1 As Worksheet: Set ws1 = Worksheets("Tabelle1")
Dim ws2 As Worksheet: Set ws2 = Worksheets("Tabelle3")
With ws2.Cells(ws2.Rows.Count, 1).End(xlUp).Offset(1, 0)
.Value = Now
.Offset(0, 1) = ws1.Range("P1")
.Offset(0, 2) = ws1.Range("S1")
.Offset(0, 3) = ws1.Range("T1")
End With
' Speichern wäre keine schlechte Idee
ThisWorkbook.Save
' Wiederholung in 5 Minuten
Application.OnTime Now + TimeValue("00:05:00"), "Makro1"
End Sub

Private Sub Aktualisierung()
' dein Makro
End Sub
Die Datenkrake würde ich permanent laufen lassen und nicht pro Tag eine separate Datei eröffnen.
1. Wird es kompliziert, weil um 22.30 würde der aktuelle Tag noch laufen und gleichzeitig müsste bereits die Terminierung für die neue Datei und den Folgetag gemacht werden. Damit schaffst du dir m.E. eine unnötige Komplexität und Fehleranfälligkeit.
2. Wenn du die Daten verteilst vereitelst du dir die Möglichkeit für eine übergreifende Auswertung. Vielleicht möchtest du mal auswerten wie die Entwicklung über das ganze Jahr war.
Obiges Beispiel fokussiert sich auf den 5min. Rhythmus und setzt eigenständig einen "Time-Stamp". Du kannst natürlich den Start auf eine runde Uhrzeit abstimmen, aber die Uhrzeit ganz genau zu treffen schafft m.E. erneut eine Komplexität die nicht notwendig ist. Vielleicht hast du mal kurzfristig einen Internetausfall (welcher hoffentlich im Aktualisierungsmakro abgefangen wird) und dann triffst du die Uhrzeit sowieso nicht und alles kommt "durcheinander".
cu
Chris
Anzeige
AW: Makro automatisiert starten
13.01.2022 17:35:27
Christian
Hallo Chris,
danke erstmal dass du dich meinem Problem angenommen hast.
Ich würde gern erstmal auf den ein oder anderen Punkt von dir eingehen. zu dem 22:30 Problem, ich verstehe nicht, wie dieses Problem entsteht, ist aber auch egal, ich habe erstmal nicht vor, dies länger als 24 Stunden laufen zu lassen. Daher dürfte es sich auch erübrigen ob ich für jeden Tag ein neues Blatt mache oder es in eines schreibe.
Zu dem Internetausfall, da hast du recht. Aber das passiert so selten, dass ich es dann einfach in Kauf nehmen würde, dass ich wieder von vorne anfangen muss. Da ich ja sowieso nur für einen tag auswerten wollte, wäre der Verlust ja nicht so immens.
Ein Problem sehe ich eher mit deinem Vorschlag das mit den 5 Min zu lösen.
Wenn ich nach jedem Ausführen 5 Minuten warte, kommt ja jedesmal die Zeit hinzu, die es zum Ausführen gebraucht hat. Bei nur ein paar Ausführungen fallen ein paar Sekunden ja nicht so ins Gewicht, aber bei 288 Ausführungen kann da schon einiges zusammen kommen.
Und es ist bei weitem ja auch nicht gesagt, dass jede Ausführung gleich lange dauert.
Daher würde ich wenn es umsetzbar ist, lieber meinen Ansatz verfolgen, die Uhrzeiten der Abfrage vorzugeben, nicht den Zeitabstand zwischen zwei Abfragen, allein schon, damit nachvollziehbar bleibt, von welcher Uhrzeit welche Daten stammen.
Danke
Christian
Anzeige
AW: Makro automatisiert starten
13.01.2022 18:36:37
ChrisL
Hi Christian
Normalerweise legt man den Intervall fest und nicht die Uhrzeit, aber ich akzeptiere, dass die Webabfrage (mit unterschiedlicher Dauer) ein spezielle Situation darstellt. Statistisch gesehen ist m.E. beides "falsch", wenn von deutlich unterschiedlichen Wartezeiten auszugehen ist.
Extrembeispiel:
18:30 (ausgeführt um 18:34)
18:35 (ausgeführt um 18:36)
18:40 (übersprungen)
18:45 (ausgeführt um 18:49)
Dennoch würde ich die Zeitreihe löschen und mit dem Timestamp arbeiten. Eine Verschiebung in der Zuordnung wäre fatal und wenn man schon von einer speziellen Situation ausgeht, dann wäre (je nach Timeout) auch eine Überschreitung der 5 min. Wartezeit zu berücksichtigen. Zudem siehst du anhand der Zeitangabe, wie gross die Differenzen/Wartezeiten tatsächlich sind.
Ausserdem kannst du wenn du mit Timestamp arbeitest, den Prozess unabhängig von der Uhrzeit starten, was die Sache vereinfacht. Ein paar "überflüssige" Zeilen kannst du ja nachträglich manuell löschen.
Ich bin bereits im langen, excel-freien Wochenende und kann darum nicht weiter tüfteln.
https://praxistipps.chip.de/excel-uhrzeit-auf-und-abrunden_33975
Ungetestet:

Application.OnTime WorksheetFunction.RoundUp(Now()*288,2)/288, "Makro1"
cu
Chris
Anzeige
AW: Makro automatisiert starten
14.01.2022 07:54:02
Christian
Hallo Chris.
ich hab ja getestet mehrmals wie lang das ausführen dauert, wir reden von ner Zeitspanne zwischen 3 und 7 Sekunden. Nur bei 288 Abfragen kann da trotzdem einiges zusammenkommen. Deshalb halte ich es wenn es nicht einen Timeout ghibt auch für ausgeschlossen dass es mal mehr als 5 Minuten dauert.
Kann man nicht einen mittelweg nehmen? Ich denke da an deinen ersten Lösungsweg mit der Wartezeit, nur keine feste Wartezeit von 5 Min sondern jeweils 5 Min abzüglich der letzten Ausführungszeit? Dann sollte doch m.e. auch das Timeout Problem gelost sein, oder?
Gruß und schönes Wochenende
Christian
Anzeige
AW: Makro automatisiert starten
14.01.2022 09:25:10
ChrisL
Hi Christian
Hast du denn die Codezeile beachtet?
Mit einem Aufrunden der aktuellen Uhrzeit auf die nächsten 5 min. sollte die Anforderung bereits erfüllt sein (die Wartezeit kumuliert sich nicht mehr mit jedem Intervall). Bei Differenzen von max. 4 Sekunden hält sich die statistische Verzerrung auch in Grenzen. Und wenn man möchte, kann man die Zeitreihe nachträglich auch noch "verfälschen" und auf gerade Uhrzeiten abrunden.
Worauf ich hingegen nicht eingegangen bin. Die Zeitreihe wird per Code erstellt und ist nicht in der Tabelle bereits vorgegeben. Damit bekommst du die exakte Zeit, hast also mal eine korrekte Datenerhebung.
cu
Chris
Anzeige
AW: Makro automatisiert starten
14.01.2022 09:28:03
ChrisL
PS:
OnTime könnte man auch noch 3-5 Sekunden verfrüht starten, dann triffst du die runde Zielzeit im Normalfall mit minimaler Abweichung.
1 sek = 1/24/60/60
AW: Makro automatisiert starten
14.01.2022 11:41:53
Christian
Hallo Chris

Public Sub Makro1()
Call Benzinpreise
' Kopiermakro
Dim ws1 As Worksheet
Dim ws2 As Worksheet
Set ws1 = Sheets("Tabelle1")
Set ws2 = Sheets("Tabelle3")
With ws2.Cells(ws2.Rows.Count, 2).End(xlUp).Offset(1, 0)
.Offset(0, -1) = Now
.Offset(0, 0) = ws1.Range("P1")
.Offset(0, 1) = ws1.Range("S1")
.Offset(0, 2) = ws1.Range("T1")
.Offset(0, 3) = ws1.Range("B18")
End With
' Speichern wäre keine schlechte Idee
ThisWorkbook.Save
' Wiederholung in 5 Minuten
Application.OnTime Now() + TimeValue("00:05:00"), "Makro1"
End Sub
Bin jetzt mal soweit gekommen. ich weiß das wird sicher niemals ein preisgekröntes Makro. Und wie du siehst hab ich noch 2 Spalten dazu getan, eine mit der aktuellen Uhrzeit und eine mit dem durschnittlichen Benzinpreis. Aber es funktioniert. Von deinem anderen Vorschlag mit 288,2 / 288 bin ich im Moment mal noch abgerückt, da hatte ich einen Fehler drin, den ich immer noch nicht gefunden hab. Er meint, das Makro1 wäre nicht existent oder Makros seien deaktiviert.
Gruß
Christian
Anzeige
AW: Makro automatisiert starten
14.01.2022 09:32:06
Christian
Hallo Chris,
seh es mir bitte nach, aber ich habe bislag noch überhaupt nichts ausprobiert oder getestet oder ähnliches, mir ging es erstmal darum zu verstehen was da passiert damit ich beim Test auch nachvollziehen kann ob es so läuft wie ich mir das wünsche. Zum anderen hab ich auch noch gewartet bis eindeutig geklärt ist auf welchem Weg das Problem gelöst werden soll (Wartezeit oder festgelegte Uhrzeit) bevor wir 3mal wieder von vorne anfangen.
Die Codezeile habe ich natürlich gelesen, aber erst jetzt mit deiner Erklärung verstehe ich sie auch. Ich versuche dann mal was auf die Beine zu stellen aus deinen bisherigen Beiträgen. Aber du siehst sicher schon an "VBA nur mit Rekorder," das wird wahrscheinlich noch sehr viel Uterstützung brauchen bis das läuft.
Gruß
Christian
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige