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

Limit von DoEvents

Limit von DoEvents
04.07.2018 08:04:10
DoEvents
Guten morgen zusammen,
ich habe ein kleines Programm geschrieben, welches für mich in regelmäßigen Abständen einen Mausclick durchführen soll. Dieses funktioniert an sich auch sehr gut, aber offenbar stößt es zeitlich an seine Grenzen. Die Aktion soll im ca. 5 Minuten Rythmus durchgeführt werden und beispielsweise 9999x wiederholt werden. Aber ich stelle fest, dass ich das Makro/Programm bereits nach einem Tag wieder erneut starten muss, da er sich irgendwie aufhängt bzw. stoppt.
Hier mal ein Ausschnitt des Codes:

Private Sub Button_Start_Click()
Dim i, j As Integer
' Ausführung und Wiederholung des Mausclicks
For i = 1 To Me.TextBox_Wiederholungen.Value
DoEv
Me.Move_Cursor_to
SendMausklick MOUSE_LEFT
Next i
End Sub
' Definiert die Wartezeit zwischen Mausclicks
Sub DoEv()
Dim Start, Startzeit
Start = Timer
Startzeit = Time
' Wenn Sekunden gewählt sind
If Me.OB_Sek.Value = True Then
Do While Timer 
In den Textboxen Intervall und Wiederholungen kann man entsprechend definieren, wie oft und in welchem Abstand gedrückt werden soll.
Jemand eine Idee, wieso es nach ca. einem Tag stoppt? Gibt es eine gewisse Laufzeitbegrenzung von VBA?
Zur Information: Der Rechner, auf dem das Makro läuft, wird nicht parallel anders benutzt, eigentlich läuft dort nur das Makro, sodass keine menschliche Aktion es irgendwie unterbrechen könnte.
Vielen Dank im Voraus!
LG
Sascha

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Timer = #Sekunden seit Mitternacht! (owT)
04.07.2018 08:17:26
EtoPHG

AW: Timer = #Sekunden seit Mitternacht! (owT)
04.07.2018 08:53:57
Sascha
Hm okay, da hatte ich nicht dran gedacht.
Das heißt, ich müsste eine Abfrage einbauen, die beispielsweise prüft, ob
(Start-Timer) > 10.000
~f~
ist (zu groß für ein normales Intervall, sprich es muss grade der Umsprung auf den nächsten Tag sein).
Bsp. Start um 23:59 (=86340), und Timer wird irgendwann bei 0:00 zu "1", dadurch wird
~f~
"Start-Timer" > 10.000
Würde es das Problem beheben, wenn ich diesem Fall "Start" wieder neu auf "Timer" setze?
Ich bin mir zudem unsicher, an welche Stelle ich genau diese Abfrage einbauen sollte.
In die Do While Schleife, oder davor?
Anzeige
AW: Limit von DoEvents
04.07.2018 08:39:24
DoEvents
Hi
Wie schon geschrieben, Timer sind die Sekunden seit Mitternacht, dh Timer wird um Mitternacht auf 0 zurückgesetzt.
Wenn jetzt Start+Intervall auf den nächsten Tag fällt, kann Timer diesen Wert nie erreichen und du hast eine Endlosschleife.
Lösung: verwende statt Timer immer Date + Timer
( nicht nur Uhrzeit, sondern Datum+Uhrzeit)
Ansonsten schau dir auch mal Application.Ontime an.
Damit kannst du Makros zu einem definierten Datum+Uhrzeit starten lassen, dann muss nicht permanent die DoEvents-Schleife laufen.
Die DoEvents-Schleife mit Timer nimmt man dann, wenn die Intervalle kleiner als Sekunden sind.
Gruß Daniel
Anzeige
AW: Limit von DoEvents
04.07.2018 09:05:04
DoEvents
Danke für den Vorschlag!
Grade noch eine andere Idee gehabt.
Würde der Einbau der folgenden Abfrage + Anweisung das Problem beheben?
' Definiert die Wartezeit zwischen Mausclicks
<pre>Sub DoEv()
Dim Start, Startzeit
Start = Timer
Startzeit = Time
' Wenn Sekunden gewählt sind
If Me.OB_Sek.Value = True Then
If (Start + Me.TextBox_Intervall.Value) > 86400 Then
Start = 0
End If
Do While Timer < Start + Me.TextBox_Intervall.Value
DoEvents
Loop
' Wenn Minuten gewählt sind
ElseIf Me.OB_Min.Value = True Then
If (Start + Me.TextBox_Intervall.Value) > 86400 Then
Start = 0
End If
Do While Timer < Start + (Me.TextBox_Intervall.Value * 60)
DoEvents
Loop
Else
MsgBox "ungültige Eingabe"
End If
End Sub</pre>
Anzeige
AW: Limit von DoEvents
04.07.2018 09:11:39
DoEvents
Hallo
Es gibt auch eine Wait Funktion (Beispiel wartet 1 Minute)

Application.Wait (Now + TimeValue("0:01:00"))

@Peter
04.07.2018 09:16:23
RPP63
Moin!
Application.Wait lässt (nomen est omen) die Application warten!
Insofern ist Excel tot und wartet brav ab …
Gruß Ralf
AW: Limit von DoEvents
04.07.2018 10:02:55
DoEvents
Hi
eine Lösung mit Application.Ontime würde so aussehen:
1. dieser Code in einem allgeminen Modul
Option Explicit
Public NächsterStart As Date
Public Anz As Long
Sub MeinMakro()
Anz = Anz + 1
If Anz 
dieser Code im Modul "DieseArbeitsmappe"
Private Sub Workbook_BeforeClose(Cancel As Boolean)
If NächsterStart > Now Then
Select Case MsgBox("Bearbeitungschleife läuft. Soll diese beendet werden?", vbYesNo +  _
vbQuestion)
Case vbYes
Application.OnTime Now, "MeinMakro", schedule:=False
Case Else
End Select
End If
End Sub

hiermit steuerst du, ob bei einem Schließen der Datei die Schleife trotzdem weiter laufen soll.
Sofern Excel nicht beendet wurde, wird ein per Application.Ontime aufgerufenes Makro auch ausgeführt, wenn die betroffene Datei geschlossen wurde (sie wird dazu wieder geöffnet, aber Excel muss laufen)
wenn das nicht passieren soll, muss man den Aufruf mit Application.Ontime zurücknehmen.
Hier dann mit Abfrage.
im Button dann nur noch dies:
Private Sub Button_Start_Click()
if Me.TextBox_Intervall.Value  "" and Me.TextBox_Wiederholungen.Value  "" AND _
(Me.OB_Sek.Value  or Me.OB_Min.Value) then
anz = 0
Call "MeinMakro"
Else
Msgbox "Bitte Anzahl und Intervall eingeben"
end if
End sub
Gruß Daniel
Anzeige
AW: Limit von DoEvents
05.07.2018 09:32:35
DoEvents
Vielen Dank Daniel!
Leider habe ich ein Problem bei der Umsetzung. Das Makro wird einmal ausgeführt, hört danach aber auf.
Wenn ich es durch den Debugger laufen lassen, zeigt er mir nach Ablaufen der Intervallzeit, also dem Zeitpunkt von "NächsterStart", die Fehlermeldung, dass "das Makro nicht ausgeführt werden kann. Das Makro ist möglicherweise in dieser Arbeitsmappe nicht verfügbar, oder alle Makros wurden deaktiviert."
Makros sind nicht deaktiviert, sonst würde ja gar nichts laufen, und es kann auch eigentlich NICHT nicht verfügbar sein, da es ja beim ersten Mal ausgeführt wird.
Anzeige
AW: Limit von DoEvents
05.07.2018 09:39:21
DoEvents
Okay, die Fehlermeldung lag an der Umbenennung der Datei in "+Kopie", mein Fehler.
Nach dem Ändern in den Originalnamen wiederholt es sich leider trotzdem nicht x)
AW: Limit von DoEvents
05.07.2018 09:54:01
DoEvents
Hab den Fehler gefunden. Hatte entgegen deiner Anweisung das Makro nicht in ein separates Modul, sondern in die UserForm geschrieben, da ich nicht alle Variablen wie MOUSE_CLICKED wiederholen wollte. Habe es aber jetzt hinbekommen.
Vielen, vielen Dank dir noch einmals, die Lösung ist super.
AW: Limit von DoEvents
05.07.2018 10:12:53
DoEvents
Hi
naja, Makros für Application.Ontime müssen in einem allgemeinen Modul stehen.
Wenn du die gleichen Variablen in mehreren Makros in verschiedenen Modulen benötigst, kannst du diese Variablen auch in einem allgemeinen Modul oberhalb der Makros als Public-Variablen deklarieren
Sie stehen dann in allen Makros des Projekts zur verfügung und behalten bei Makrowechsel dann auch ihre Werte.
wie gesagt, deine Alte Lösung würde auch funktionieren, wenn du eben nicht nur die Uhrzeit (TIMER) sondern Datum und Uhrzeit für die Prüfung verwenden würde.
Dann würde ja, wenn der Timer auf 0 zurück gesetzt wird, das Datum erhöht werden, so dass auch bei Datumswechsel weiter hochgezählt wird.
allerdings muss man den Timer dann durch die Anzahl Sekunden/Tag teilen, damit man ihn zu Date hinzuaddieren kann (in Date entspricht ein Tag mit 24 dem Wert 1)
also statt Timer immer Date + Timer / 24 / 60 / 60
dann geht auch deine alte Lösung
Gruß Daniel
Anzeige

29 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige