Excel, Makro jede Minute starten - schleife

Hallo,

erst einmal möchte ich mich bedanken für die vielen hilfreichen Tipps von dieser Seite.

Doch leider habe ich ein Problem, welches sich nicht so leicht, für mich zu mindestens, lösen lässt.

Ich habe vor einiger Zeit ein Strahlungsmessgerät gekauft, welches mittels USB an den PC angeschlossen wird und in einer Excel Tabelle die Daten sammelt.

Dieses Datensammeln findet über das programmierte Makro statt.
Ich brauche also nur auf den Knopf zu klicken und die aktuellen Daten werden von Messgerät übertragen.
Automatisch wird immer eine neue Zeile begonnen.

Das Problem, diese Arbeitsweise ist nicht für Langzeitmessungen geeignet, da ich immer selbstständig den Klick auslösen muss und somit theoretisch 24 h lang alle 5 min klicken muss.

Nun habe ich heute den ganzen Tag im Internet herumgelesen um einen Automatismus zu finden, welcher mir automatisch dieses Makro alle 5 min startet und zusätzlich auch die Uhrzeit in die dahinter liegende Spalte schreibt und dann wieder in die
Zeile springt und ist in 5 min erneut ausführt.

Ich habe viel im Internet gefunden, aber leider scheint es wohl an meinem Wissen und Implementierung zu liegen, das es nicht geht.
Das einzige was ich nun hinbekommen habe, ist das Makro um die aktuelle Uhrzeit zu bekommen.

Das andere Makro, was mir automatisch immer die Messung alle 5 Min starten soll klappt leider nicht in meinem Excel 2010.

Kennt sich jemand eventuell damit aus, so dass es mir jemand hierbei behilflich sein könnte?
Gerne kann ich euch auch die Excel Tabelle senden, wenn es euch hilft einen besseren Überblick zu bekommen.

ich bin heute weitergekommen

und kann mit beiden makros die messabfrage starten und nach 10 sek. kommt der ergebnis.
leider bekomme ich aber keine schleife hin, das er alle 10 sek. abfragt so lange bis ich stoppe.

folge code habe ich benutzt und beide bewirken das gleiche aktuell bei mir,

Option Explicit
Sub test()
Debug.Print Now
Application.OnTime Now + TimeSerial(0, 0, 10), „X1_3_Hazard_Read_Data“
End Sub

Public Sub test2()
Application.OnTime Now + TimeValue(„0:0:3“), „X1_3_Hazard_Read_Data“
End Sub

Hallo,
ich weiß nicht, ob ich das richtig verstanden habe (ich habe bei solchen Aufgaben meist direkte Windows-Funktionen genutzt), „X1_3_Hazard_Read_Data“ ist die Routine, die die Daten in die Excel-Tabelle nach vorgegebener Wartezeit (Now + …) überträgt? Dann einfach nach dem Übertragen die Routine test oder test2 wieder aufrufen. Läuft dann allerdings bis Excel überläuft oder beendet wird, sicherheitshalber Begrenzung einbauen!
Viel Erfolg
Rainer

Hallo,
bei dieser Fragestellung kann ich leider nicht helfen.
Beste Grüße
H. Schuster

Ich habe ähnliche Probleme immer mit dem Scheduler gelöst. Vielleicht nicht die eleganteste Lösung, hat aber funktioniert. Ob es mit Intervallen 10 sec oder 60 sec klappt, weiß ich nicht. Die Datei wurde aufgerufen, führte ihr Autostartmakro aus, mit dem die Datei am Ende gespeichert und geschlossen wurde.

Hallo,

da hast Du ja eine nette Aufgabe - leider habe ich da keine Erfahrung.
Aber in einem anderen Zusammenhang gab man mir mal den Tip, das Windows einen Taskplaner hat mit dem man z.B. Virenscanner beim Herunterfahren starten kann.
Der kann sicher auch eine Excel Makro alle 5 min aufrufen. Leider ha ich aber keine Erfahrung damit - ich wollte nur eine Programm verzögert starten und fand Beiträge die Programm abhängig von anderen Programmen starten. Also Prog 2 darf erst starten wenn Prog 1 beendet ist.
Bei Windwos 7 einfach Aufgabenplanung ins suchfeld geben.
Viel Erfolg.
Armin

Hallo Edelstahl7,

das per Ontime gestartete Makro muss immer sich selbst neu starten, um eine Endlosschleife zu erreichen. Das Makro zum Einlesen der Messdaten wird dann innerhalb des Makros aufgerufen.

Zusätzlich sollte man sich auch ein Stoppmakro erstellen,welches manuell gestarte werden kann, aber unbedingt vor dem Schliessen der Datei automatisch ausgeführt werden muss, damit es nicht zu einem unerwünschten Neustart der Datei kommt.

Gruß
Franz

'Allgemeines Modul
Option Explicit
Public datTime As Date

Sub StartTimer()
 Call subAktion
End Sub

Sub StopTimer()
 On Error Resume Next 'falls Timer nicht gestartet wurde
 Application.OnTime Earliesttime:=datTime, Procedure:="subAktion", schedule:=False
End Sub

Sub subAktion()
 Dim rng As Range
 'Messdaten einlesen
 Call X1\_3\_Hazard\_Read\_Data

 With ThisWorkbook.Worksheets(1) 'Tabellenblatt in das Daten geschrieben werden
 'in Spalte A die letzte ausgefülle Zelle suchen
 Set rng = .Cells(.Rows.Count, 1).End(xlUp)
 'Datum in Spalte B
 rng.Offset(0, 1).Value = Date
 'Zeit in Spalte C
 rng.Offset(0, 2).Value = Time
 End With

 datTime = Now + TimeSerial(Hour:=0, Minute:=0, Second:=10)
 Application.OnTime Earliesttime:=datTime, Procedure:="subAktion"
End Sub



'Unter DieseArbeitsmappe

Private Sub Workbook\_BeforeClose(Cancel As Boolean)
 Call StopTimer
End Sub

Hallo!

Der OnTime-Befehl löst ein Makro zu einem bestimmten Zeitpunkt aus. Um eine regelmäßige Wiederholung zu erhalten, muss der Befehl bei jeder Auslösung wieder aufgerufen werden, der „timer“ also immer wieder neu gestellt werden.

Verstehe ich richtig, dass der Messwert einfach in die gerade markierte Zelle geschrieben wird?

Dann müsste es in etwa so funktionieren:

Sub test3()
zeile = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row
'bestimmt die nächste freie Zeile in spalte 1
Cells(zeile, 2).Value = Now()
'schreibt die Uhrzeit in Spalte 2
Cells(zeile, 1).Select
'wählt die Zelle in Spalte 1 an
X1_3_Hazard_Read_Data
'startet das Messmakro
Application.OnTime Now + TimeValue(„00:01:00“), „test3“
'stellt den Timer auf eine Minute, dann wird das Makro wieder gestartet
End Sub

Schöne Grüße!

Flo

Hallo edelstahl7,
unter http://support.microsoft.com/kb/180736 findest du eine sehr gute Beschreibung des WinAPI-Timers.

Speichere aber deine Änderungen IMMER, bevor du das Programm startest.

In dem Beispiel muss du nur die Namen des Form-Objektes, des Buttons ung ggf. der Textbox anpassen.

Den Aufruf deiner Methode zum Lesen der Daten machst du in ‚TimerProc‘.
Die Zeit gibst du bei dem Aufruf von ‚SetTimer‘ (dritter parameter), 5 Min=300000ms

MfG
W.W.

Hallo,
die Idee klinkt gut, aber in Excel gibt es nichts, was den Impuls, also den Zyklus, auslöst. Da würde nach meiner Meinung nur ein Visual-Basic-Programm helfen.

Viel Erfolg
BFR

Hallo
Ja, logisch fehlt es dir an der Schleife!
Du rufst ,i
Application.OnTime Now + TimeSerial(0, 0, 10), „X1_3_Hazard_Read_Data“ die „X1_3_Hazard_Read_Data“ Prozedure auf und wo bleibt nun der Repeat auf die „Test“ Prozedure?
Du musst das Programm so umschreiben!
Public Sub test2()
Application.OnTime Now + TimeValue(„0:0:3“), „test2“
Call X1_3_Hazard_Read_Data
End Sub

Aber Achtung, jetzt hast Du eine Endlosschleiffe, desshalb benutze für 100 x lesen folgendes:
Public lngL as long 'Globalvariable
Public bolB as Boolean
Public Sub test()
if bolB = False then lngL = 1
if lngL = 100 then exit sub
bolB = true
Application.OnTime Now + TimeValue(„0:0:3“), „test2“
Call X1_3_Hazard_Read_Data
lngL = lngL + 1
End Sub

Hallo,

ich habe dir mal ein Makro names „MacroLoop“ programmiert, das eine vorgegebene Zeit lang läuft und regelmäßig Einträge in einer Tabelle macht.
Die gesamte Laufzeit (z.B. 86400 Sekunden = 1 Tag) und das Intervall (z.B. 300 Sekunden = 5 Minuten) kann man natürlich anpassen.
Du musst dann „nur noch“ deinen eigenen Funktionsaufruf einarbeiten.

Viel Spaß damit.

Hier ist der VBA-Code:

Option Explicit

Const StartZeile As Long = 1 'Start-Zeile
Const Spalte As Long = 1 'Verwendete Spalte
Const Intervall As Long = 300 'Intervall in Sekunden
Const Laufzeit As Long = 86400 'Gesamtlaufzeit in Sekunden

Sub MacroLoop()
Dim Zeile As Long
Dim StartZeit As Date
Dim AktuelleZeit As Date
Dim i As Long, n As Long

n = Laufzeit / Intervall - 1 ’ Anzahl der Durchläufe minus 1 (weil start mit 0)
Zeile = StartZeile ’ Start-Zeile
StartZeit = Date + Time ’ Aktuelles Datum und Uhrzeit

For i = 0 To n 'Schleife
Cells(Zeile, Spalte).Select 'Zelle auswählen
Selection.NumberFormatLocal = „TT.MM.JJJJ hh:mm:ss“ 'Datum/Zeit-Format setzen
AktuelleZeit = StartZeit + (Intervall * i) / 86400# 'Zeit des nächsten Eintrags
Selection.Value = AktuelleZeit 'Zeit des Ereignisses eintragen (noch in der Zukunft)
Application.Wait (AktuelleZeit) 'Warte bis Zeitpunkt erreicht ist
'Hier weitere Funktion aufrufen!
Cells(Zeile, Spalte + 1) = „X“ 'Hier statt „X“ das Ergebnis der Funktion eintragen
Zeile = Zeile + 1
Next i

Beep 'Ende akustisch signalisieren

End Sub

Hallo edelstah7,

solche Makros habe ich noch nicht programmiert auch bin ich noch in Office 2003 zu Hause.

Gruß Hugo

Hallo

ich würde in das Sheet einen Button einfügen, bei Doppelklick im Bearbeitungsmodus öffnet sich der Editor mit

Private Sub CommandButton1_Click()

in diese Sub wurde ich einen Do … while Loop einfügen, aber vorsicht, es muss sichergetellt werden, das die Abbruchbedingung erfüllt wird,

Gruß