Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Anzeige
Inhaltsverzeichnis

Application.Ontime Verzögerung bei Inaktivität

Forumthread: Application.Ontime Verzögerung bei Inaktivität

Application.Ontime Verzögerung bei Inaktivität
15.05.2025 14:11:01
DoktorExcel
Ich will einmal pro Sekunde ein Unterprogramm ausführen lassen mit Application.Ontime.

Seit einem Windows- oder Office-Update (ich weiß nicht welches) funktioniert dies nicht mehr zuverlässig. Application.Ontime wird teilweise nur mit vielen Sekunden Verzögerung ausgeführt.

Beispiel (siehe beigefügte Datei):
https://www.herber.de/bbs/user/177459.xlsm

Details:
Beim Starten des Codes wird mittels Application.Ontime nach 1 Sekunde das Unterprgamm "Ontime" gestartet. Dieses gibt die Sollzeit, die Istzeit, die Dauer sowie die Verspätung in der Tabelle aus. Am Ende des Unterprogramms wird die Soll-Startzeit (EarliestTime) um eine Sekunde hochgesetzt und Application.Ontime neu gestartet.

Zunächst arbeitet das Programm wie gewünscht. Nach ca. 10 Sekunden wird das Unterprogamm aber nicht mehr jede Sekunde, sondern nur noch alle 5 Sekunden aufgerufen und holt anschließend die verpassten Aufrufe (4x) nach. Nach einer Minute erhöht sich das Intervall auf 20 Sekunden, und auch hier werden dann die fehlenden 19 Aufrufe nachgeholt.

Der Effekt lässt sich abstellen, indem man die Maus bei aktiviertem Excel-Fenster (Tabelle oder VBA-Editor) bewegt. Dann erfolgt der Aufruf wieder im Sekundentakt, solange man die Maus bewegt.

Es erscheint also so, als ob Excel wg. vermeintlicher Inaktivität keine Rechenzeit für Application.Ontime zu Verfügung gestellt würde (von Windows? Von Excel?).

Wenn man dagegen in einer Endlosschleife während der Ausführung dauernd DoEvents aufruft (siehe auskommentierten Code), also sozusagen Excel beschäftigt hält, funktioniert der Aufruf einmal pro Sekunde. Allerdings geht dadurch die CPU-Auslastung von 1% auf >14% hoch.

Der Zyklus lässt sich durch Anklicken von Stopp beenden.

Ich verwende Office 365 Business mit Windows 11 Pro Version 24H2.

Der Effekt tritt auf mehreren Rechnern auf (auch bei Windows 10 Pro Version 2009).

Hat jemand eine Idee, woran das liegen könnte und wie man es beheben kann?



Dim tt1 As Single
Dim tt2 As Single
Dim Zeit As Date
Dim Intervall As Long

Dim Stopp As Boolean

Sub Start() ' Zum Starten der regelmäßigen Ausgabe

Intervall = 1 ' in Sekunden

' Ausgabe löschen
Range("A4:D10000").Select
Selection.ClearContents
With Range("A4:D10000").Interior
.Pattern = xlNone
.TintAndShade = 0
.PatternTintAndShade = 0
End With

' Ausgabe vorbereiten
iZeile = 4

' Zeit für erste Ausführung berechnen
Zeit = Now + Intervall / 24 / 3600
tt1 = Timer ' Zeitstempel speichern

Stopp = False

' Zyklus anstoßen
Application.Ontime Zeit, "Ontime"

' Wenn man diesen Code ausführen lässt, funktioniert der regelmäßige Aufruf. Allerdings frisst Excel dann sehr viel Rechenzeit, die anderweitig benötigt wird
' While Not Stopp
' DoEvents
' Wend

End Sub

Sub Stoppen() ' Zum Beenden des regelmäßigen Aufrufens

Stopp = True

End Sub

' Unterprogramm, das regelmäßig mittels Application.Ontime ausgeführt werden soll
Sub Ontime()

' Ausgabe der Soll-Zeit für die Ausführung
Cells(iZeile, 1) = Zeit

' Ausgabe der Ist-Zeit der Ausführung
Zeit2 = Now
Cells(iZeile, 2) = Zeit2

' Ausgabe der Dauer des Zyklus
tt2 = Timer
Cells(iZeile, 3) = tt2 - tt1
If tt2 - tt1 - Intervall > 0.3 Then
With Cells(iZeile, 3).Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.Color = 65535
.TintAndShade = 0
.PatternTintAndShade = 0
End With

End If
tt1 = tt2

' Ausgabe der Verspätung
Cells(iZeile, 4) = (Zeit2 - Zeit) * 24 * 3600

' Zeile Hochzählen
iZeile = iZeile + 1

' Scrollen des Bildschirms erzwingen
Rows(iZeile).Select

' Diese Zeilen haben keine Verbesserung gebracht
' Rows(iZeile).Activate
' DoEvents

' Nächste Start-Zeit berechnen
Zeit = Zeit + Intervall / 24 / 3600

If Not Stopp Then ' Wenn nicht Stopp gedrückt wurde
' Neuen Zyklus anstoßen
Application.Ontime Zeit, "Ontime"
End If

End Sub

Anzeige

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Application.Ontime Verzögerung bei Inaktivität
15.05.2025 14:33:12
Ulf
Hi,
wer Ontime überschreibt...
Kann das so nicht nachvollziehen. Die Ungenauigkeiten bewegen sich bei mir Ryzen 32Gb RAM SSD O2019 W11 H2 im Rahmen. Die Benamung ist in jedem fall kritisch eber vlt nicht ausschlaggebend. Getestet:
Option Explicit


Dim tt1 As Single
Dim tt2 As Single
Dim Zeit As Date
Dim Intervall As Long
Dim iZeile As Long

Dim bStopp As Boolean
Dim Zeit2 As Date

Sub Start() ' Zum Starten der regelmäßigen Ausgabe
Intervall = 1 ' in Sekunden
' Ausgabe löschen
Range("A4:D10000").Select
Selection.ClearContents
With Range("A4:D10000").Interior
.Pattern = xlNone
.TintAndShade = 0
.PatternTintAndShade = 0
End With
' Ausgabe vorbereiten
iZeile = 4

' Zeit für erste Ausführung berechnen
Zeit = Now + Intervall / 24 / 3600
tt1 = Timer ' Zeitstempel speichern

bStopp = False

' Zyklus anstoßen
Application.Ontime Zeit, "Routine"

' Wenn man diesen Code ausführen lässt, funktioniert der regelmäßige Aufruf. Allerdings frisst Excel dann sehr viel Rechenzeit, die anderweitig benötigt wird
' While Not bStopp
' DoEvents
' Wend

End Sub

Sub bStoppen() ' Zum Beenden des regelmäßigen Aufrufens
bStopp = True
End Sub

' Unterprogramm, das regelmäßig mittels Application.Ontime ausgeführt werden soll
Sub Routine()
' Ausgabe der Soll-Zeit für die Ausführung
Cells(iZeile, 1) = Zeit
' Ausgabe der Ist-Zeit der Ausführung
Zeit2 = Now
Cells(iZeile, 2) = Zeit2
' Ausgabe der Dauer des Zyklus
tt2 = Timer
Cells(iZeile, 3) = tt2 - tt1
If tt2 - tt1 - Intervall > 0.3 Then
With Cells(iZeile, 3).Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.Color = 65535
.TintAndShade = 0
.PatternTintAndShade = 0
End With
End If
tt1 = tt2
' Ausgabe der Verspätung
Cells(iZeile, 4) = (Zeit2 - Zeit) * 24 * 3600
' Zeile Hochzählen
iZeile = iZeile + 1
' Scrollen des Bildschirms erzwingen
Rows(iZeile).Select
' Diese Zeilen haben keine Verbesserung gebracht
' Rows(iZeile).Activate
' DoEvents
' Nächste Start-Zeit berechnen
Zeit = Zeit + Intervall / 24 / 3600
If Not bStopp Then ' Wenn nicht bStopp gedrückt wurde
' Neuen Zyklus anstoßen
Application.Ontime Zeit, "Routine"
End If
End Sub



hth
Ulf
Anzeige
AW: Application.Ontime Verzögerung bei Inaktivität
15.05.2025 21:51:46
Volti
Hallo
Hast Du mal anstelle von Ontime die API-Funktionen SetTimer und Killtimer ausprobiert.
Müsste man mal testen ob da auch die Probleme auftreten.
Die haben ja zunächst mal nichts mit Office zu tun.
Die Maus könnte man bei Bedarf auch bewegen lassen.
Gruß Karl-Heinz
AW: Application.Ontime Verzögerung bei Inaktivität
15.05.2025 14:42:42
DoktorExcel
Hallo Ulf,

danke für Deinen Beitrag. Die Benennung der Unterprogramme und Variablen scheint keinen Einfluss zuhaben.

Bei mir sieht das Ergebnis aber wie folgt aus:

T Soll T Ist Dauer Verspätung
15.05.2025 12:35:28 15.05.2025 12:35:28 0,5469 s 0,00 s
15.05.2025 12:35:29 15.05.2025 12:35:29 1,0078 s 0,00 s
15.05.2025 12:35:30 15.05.2025 12:35:30 1,0117 s 0,00 s
15.05.2025 12:35:31 15.05.2025 12:35:31 0,9922 s 0,00 s
15.05.2025 12:35:32 15.05.2025 12:35:32 1,0078 s 0,00 s
15.05.2025 12:35:33 15.05.2025 12:35:33 1,0039 s 0,00 s
15.05.2025 12:35:34 15.05.2025 12:35:34 0,9961 s 0,00 s
15.05.2025 12:35:35 15.05.2025 12:35:35 1,0000 s 0,00 s
15.05.2025 12:35:36 15.05.2025 12:35:36 1,0117 s 0,00 s
15.05.2025 12:35:37 15.05.2025 12:35:37 1,0078 s 0,00 s
15.05.2025 12:35:38 15.05.2025 12:35:38 1,0039 s 0,00 s
15.05.2025 12:35:39 15.05.2025 12:35:43 5,0195 s 4,00 s
15.05.2025 12:35:40 15.05.2025 12:35:43 0,0117 s 3,00 s
15.05.2025 12:35:41 15.05.2025 12:35:43 0,0000 s 2,00 s
15.05.2025 12:35:42 15.05.2025 12:35:43 0,0039 s 1,00 s
15.05.2025 12:35:43 15.05.2025 12:35:43 0,0000 s 0,00 s
15.05.2025 12:35:44 15.05.2025 12:35:48 5,0117 s 4,00 s
15.05.2025 12:35:45 15.05.2025 12:35:48 0,0117 s 3,00 s
15.05.2025 12:35:46 15.05.2025 12:35:48 0,0000 s 2,00 s
15.05.2025 12:35:47 15.05.2025 12:35:48 0,0078 s 1,00 s
15.05.2025 12:35:48 15.05.2025 12:35:48 0,0000 s 0,00 s
15.05.2025 12:35:49 15.05.2025 12:35:53 5,0039 s 4,00 s
15.05.2025 12:35:50 15.05.2025 12:35:53 0,0039 s 3,00 s
15.05.2025 12:35:51 15.05.2025 12:35:53 0,0078 s 2,00 s
15.05.2025 12:35:52 15.05.2025 12:35:53 0,0000 s 1,00 s
15.05.2025 12:35:53 15.05.2025 12:35:53 0,0000 s 0,00 s

Allerdings haben wir bei uns im Büro gerade Rechner entdeckt, bei denen das Problem nicht auftritt. Sprich: Wir haben mehrere Rechner mit Problem und mehrere ohne Problem. Die Betriebssysteme sind zum Teil unterschiedlich, aber Office 365 müsste überall das gleiche sein. Die Hardware ist natürlich unterschiedlich, wobei es sich größtenteils um Lenovo-Rechner handelt.

Irgendeine Idee, was das sein könnte?
Anzeige
AW: Application.Ontime Verzögerung bei Inaktivität
15.05.2025 15:43:21
Georgi
Hallo,
interessant wäre ob die Datei lokal auf dem Rechner oder auf einem Netzlaufwerk liegt und ausgeführt wird.
Wenn die Datei liegt im Netzwerk, ist das ggf. der Knackpunkt; denn der Netzwerkzugriff hängt von verschiedenen Faktoren ab.
Zum einen kann es ein Virenscanner sein, zum anderen die Hardware oder deren Einstellung die sich bei Inaktivität schlafen legt und erst wieder geweckt werden muss.

Viele Grüße
Georgi
Anzeige
AW: Application.Ontime Verzögerung bei Inaktivität
15.05.2025 21:57:22
Ulf
Hi,
wie Georgi schon schrieb gibt es diverse Möglichkeiten dein Problem zu verursachen. Könnte HPET, RAM, Auslagerungsdatei, Verwaltungssoftware, Cache von HD, Protokollierung durch Software, Virenscanner ... sein.
In jedem Fall ist ein zuverlässiger Timer bei so kurzem Intervall mit VBA schlecht zuverlässig bis nicht machbar.
Live-Überwachung -> nogo
Was du programmatisch tun kannst, ist eine Collection oder ein Array benutzen und nur RAM nutzen, und bei Beendigung in die Datei schreiben.
hth
Ulf
Anzeige
AW: Application.Ontime Verzögerung bei Inaktivität
15.05.2025 16:11:46
DoktorExcel
Danke für die Kommentare.

Wir haben jetzt 11 Rechner getestet:
Bei 5 Rechnern funktioniert das Programm, bei 6 nicht. Es ist kein Zusammenhang zwischen
- Win10 oder Win11
- Datei lokal oder Netzwerk
- Excel im Normal-Modus oder im abgesicherten Modus
- alte Rechner / neue Rechner
feststellbar. Selbst Rechner, die eigentlich die gleiche Hardware haben, verhalten sich unterschiedlich.

Erstaunlich ist auch, dass bei allen Rechnern, bei denen es nicht funktioniert, die Hochschaltung des Intervalls auf 5 Sekunden nach 10 Sekunden Laufzeit und auf 20 Sekunden nach einer Minute Laufzeit erfolgt. Das sind erstaunlich runde Werte.

Hat jemand eine Idee, was man noch testen könnte?
Anzeige
AW: Application.Ontime Verzögerung bei Inaktivität
15.05.2025 16:24:34
Georgi
Hallo,
ich reite nochmal den Gaul Netzwerk.
Anmeldung an Rechner ohne Netzwerk. Ggf sogar Rechner vom Netzwerk trennen.
Es kann sein, dass Netzwerkverbindungen den Rechner aufhalten, die nichts mit Deiner Excel- Datei zu tun haben.

Viele Grüße
Georgi

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige