VBA Tipp: Programmausführung für einen Zeitraum unterbrechen

Aus DBWiki
Wechseln zu: Navigation, Suche

Aufgabenstellung

Ich will für einen bestimmten Zeitraum die Programmausführung anhalten, und

Lösung 1: dabei weitere Aktionen innerhalb von Access (Formularbedienung usw.) zulassen
Lösung 2: dabei keine weiteren Aktionen innerhalb von Access zulassen
Lösung 3: eine resourcensparende Kombination aus den Lösungen 1 und 2 verwenden

Lösung 1

Warten in einer Schleife, dabei mit DoEvents weitere Aktualisierungen zulassen:

Public Sub Warten(ByVal MilliSekunden As Double)
 
 'Quelle: www.dbwiki.net oder www.dbwiki.de
 
 Dim i As Double
 Dim Ende As Double
 
 Ende = Timer + (MilliSekunden / 1000)
 
 Do While i < Ende
   DoEvents
   i = Timer
 Loop
 
End Sub

Aufruf

10 Sekunden warten

'entweder
Warten 10000
 
'oder
Warten (10000)
 
'oder
Call Warten(10000)

Lösung 2

Warten mit der API-Funktion Sleep:

Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Aufruf

10 Sekunden warten

'entweder
Sleep 10000
 
'oder
Sleep (10000)
 
'oder
Call Sleep(10000)

Lösung 3

Lösung 1 und Lösung 2 lassen sich resourcensparend dann so kombinieren:

Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
 
Public Sub Warten(ByVal MilliSekunden As Double)
 
 'Quelle: www.dbwiki.net oder www.dbwiki.de
 
 Dim i As Double
 Dim Ende As Double
 
 Ende = MilliSekunden / 100
 
 Do While i < Ende
   Sleep 100
   DoEvents
   i = i + 1
 Loop
 
End Sub

Aufruf

10 Sekunden warten

'entweder
Warten 10000
 
'oder
Warten (10000)
 
'oder
Call Warten(10000)
Wiki hinweis.png Anmerkung: Obwohl in den Parametern als Einheit Millisekunden angegeben werden, ist die Zeitmessung keineswegs auf Millisekunden genau. Je nach Rechnerauslastung und -geschwindigkeit dürfte die tatsächlich erreichbare Genauigkeit im Zehntelsekunden-Bereich liegen.