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

Forumthread: Kurze Frage: Gibt es keinen SLEEP Befehl?

Kurze Frage: Gibt es keinen SLEEP Befehl?
Holger
Hallo,
ich möchte in einem Makro 1 Sekunde "schlafen", also die weitere Ausführung um
1 Sekunde verzögern. Dieses immer wieder in einer Schleife.
Anscheinend gibt es den Befehl SLEEP aber gar nicht.
Gibt es eine andere Möglichkeit?
Gruß
Holger
Anzeige

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
Klargibt es sleep ....
10.09.2010 09:39:02
Klaus
Moin Holger,
"sleep" ist schon richtig.
Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Sub test()
MsgBox (Timer)
Sleep 1000
MsgBox (Timer)
End Sub
Grüße,
Klaus M.vdT.
AW: Kurze Frage: Gibt es keinen SLEEP Befehl?
10.09.2010 09:39:29
MisterB
Hallo Holger,
such mal im Archiv nach dem Befehl Application.Wait
Gruß
Martin
Anzeige
Danke euch
10.09.2010 09:54:10
Holger
Hallo,
Vielen Dank!
Das "Sleep" Makro habe ich ehrlich gesagt nicht ganhz kapiert,
aber die Application.Wait Methode überzeugt mich.
Gruß+Dank
Holger
Danke für die Rückmeldung! mit Text
10.09.2010 09:57:48
Klaus
Hallo Holger,
das Makro zeigt die Zeit, schläft dann 1 sekunde und zeigt dann wieder die Zeit, um zu beweisen dass es geschlafen hat ;-)
Interessant ist die Deklaration darüber, die den Befehl "sleep" ermöglicht.
Grüße,
Klaus M.vdT.
Anzeige
Doch noch eine Frage
10.09.2010 10:05:02
Holger
Hallo Klaus,
ich verstehe immer noch nicht, wie ich das Makro einbauen könnte.
Hier also mein Code. Statt Application.Wait würde ich gerne nur 0.5 sec unterbrechen, schau mal
hier.
Public Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim intCol As Integer
If Target.Cells.Count And Target.Address = "$L$10" Then
intCol = 14
If Columns("N:R").Hidden = True Then
Call GetPublishesExtended(ActiveSheet)
For intCol = 14 To 18
Columns(intCol).Hidden = False
Application.Wait (Now + TimeSerial(0, 0, 1))
Next intCol
Target.Interior.Color = vbYellow
Else
For intCol = 18 To 14 Step -1
Columns(intCol).Hidden = True
Application.Wait (Now + TimeSerial(0, 0, 1))
Next intCol
Target.Interior.Color = vbBlack
End If
End If
End Sub

Anzeige
AW: Doch noch eine Frage
10.09.2010 10:53:20
Klaus
Hi,
Declare drüber, sleep rein, 0.5sek = 500 Milisek.
Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Public Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim intCol As Integer
If Target.Cells.Count And Target.Address = "$L$10" Then
intCol = 14
If Columns("N:R").Hidden = True Then
Call GetPublishesExtended(ActiveSheet)
For intCol = 14 To 18
Columns(intCol).Hidden = False
'Application.Wait (Now + TimeSerial(0, 0, 1))
sleep 500
Next intCol
Target.Interior.Color = vbYellow
Else
For intCol = 18 To 14 Step -1
Columns(intCol).Hidden = True
'Application.Wait (Now + TimeSerial(0, 0, 1))
sleep 500
Next intCol
Target.Interior.Color = vbBlack
End If
End If
End Sub
Aber Application.Wait (Now + TimeSerial(0, 0, 0.5)) müsste auch funktionieren, oder?
Warum blendest du im 0,5 Sekunden Takt Spalten aus? Willst du die User ärgern? :-) Egal, geht mich ja auch nichts an.
Grüße,
Klaus M.vdT.
Anzeige
AW: Doch noch eine Frage
10.09.2010 11:01:42
Holger
Hallo Klaus,
manchmal gehen Dinge einfach zu schnell und ich bin gerade dabei, einen Einblendeffekt zu schreiben.
Dabei will ich den sleep immer weiter verkürzen, um eine Art Wischen zu erreichen.
Da vor her ein Makro läuft läuft, soll der User so ein subjektives Gefühl bekommen, es wäre wirklich einiges passiert. Aber das macht nur Sinn, wenn die die komplette Datei sehen würdest ;)
Ich verbringe mehr Zeit mit Usability als mit dem eigentlichen Code, habe damit aber gute Erfahrungen gemacht.
Anzeige
AW: Doch noch eine Frage
10.09.2010 11:16:46
Klaus
Hi Holger,
dann sollte "sleep" ja genau das richtige für dich sein! Statt sleep 500 nimmst du sleep x, die Variable x kannst du innerhalb der Schleife beliebig verringern.
Dem User zu suggerieren, es sei viel passiert find ich witzig :-) Ich verstehs aber sehr gut. Meines erachtens reicht aber eine MsgBox am Ende des Makro ("Unheimlich viele Operationen ausgeführt - drücke OK") um dem User ein warmes Gefühl zu geben.
Grüße,
Klaus M.vdT.
Anzeige
AW: Doch noch eine Frage
10.09.2010 11:21:05
Holger
Hi Klaus,
bei Application.Wait kann man anscheinend auch eine integer Variable benutzen.
Die kann ich in der For Schleife runterzählen.
Ich versuche immer, alles so einfach wie möglich zu machen und etwas aufgehübscht.
Am liebsten würde ich bei der Target.Adress eine Art Entriegeln-Effekt programmieren wie beim iPhone, aber keine Ahnung wie. So kann man auch durch Zufall auf die Zelle kommen, das ist noch nicht so schön. Über einen Button will ich es aber auch nicht machen.
Mir fällt gerade auf, dass ich ScreenupDating anschalten muss, um die Zeilen verzögert darzustellen.
Blöd, weil dadurch auch der Rest der Tabelle blinkt :-(
Anzeige
AW: Doch noch eine Frage
10.09.2010 11:42:50
JogyB
Hallo Klaus,
wieso zeigst Du dem User nicht in der Statusbar Informationen an, wäre sinnvoller als irgendwelche Wischeffekte.
Gruß, Jogy
;
Anzeige
Anzeige

Infobox / Tutorial

Verwendung des SLEEP Befehls in Excel VBA


Schritt-für-Schritt-Anleitung

Um den SLEEP Befehl in Excel VBA zu nutzen, kannst Du die folgende Schritt-für-Schritt-Anleitung befolgen:

  1. Öffne den VBA-Editor:

    • Drücke ALT + F11, um den Visual Basic for Applications (VBA) Editor zu öffnen.
  2. Füge eine neue Modul hinzu:

    • Klicke mit der rechten Maustaste auf „VBAProject (deineDatei.xlsx)“ und wähle Einfügen > Modul.
  3. Deklariere die Sleep-Funktion:

    • Füge die folgende Zeile am Anfang des Moduls ein:
      Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
  4. Erstelle eine Subroutine:

    • Füge eine Subroutine hinzu, in der der Sleep Befehl verwendet wird:
      Sub TestSleep()
       MsgBox (Timer) ' Zeige die aktuelle Zeit an
       Sleep 1000 ' Warten für 1 Sekunde
       MsgBox (Timer) ' Zeige die Zeit nach der Pause an
      End Sub
  5. Führe das Makro aus:

    • Drücke F5, um die Subroutine auszuführen und die Wirkung von Sleep zu beobachten.

Häufige Fehler und Lösungen

  • Fehler: „Sleep nicht definiert“
    Lösung: Stelle sicher, dass die Deklaration Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) korrekt im Modul steht.

  • Fehler: Makro stoppt nicht wie erwartet
    Lösung: Überprüfe die Zeitparameter, die Du an Sleep übergibst. Die Zeit sollte in Millisekunden angegeben werden (1 Sekunde = 1000 Millisekunden).


Alternative Methoden

Wenn Du den SLEEP Befehl nicht verwenden möchtest, gibt es Alternativen:

  • Application.Wait:

    Application.Wait (Now + TimeValue("0:00:01")) ' Pausiert für 1 Sekunde
  • VBA DoEvents:

    Dim StartTime As Double
    StartTime = Timer
    Do While Timer < StartTime + 1 ' 1 Sekunde warten
      DoEvents
    Loop

Beide Methoden sind nützlich, wenn Du die Ausführung von Makros pausieren möchtest, ohne den SLEEP Befehl zu verwenden.


Praktische Beispiele

Hier ein Beispiel, wie Du den Sleep Befehl in einer Schleife verwenden kannst:

Sub ExampleSleepLoop()
    Dim i As Integer
    For i = 1 To 5
        MsgBox "Iteration " & i
        Sleep 500 ' Pause für 0.5 Sekunden
    Next i
End Sub

In diesem Makro wird jede Iteration 0.5 Sekunden lang pausiert, bevor die nächste Nachricht angezeigt wird.


Tipps für Profis

  • Variabeln für dynamische Pausen: Verwende Variablen, um die Wartezeit flexibel zu gestalten. Beispiel:

    Dim pauseTime As Long
    pauseTime = 500 ' 0.5 Sekunden
    Sleep pauseTime
  • Verwende Sleep in Kombination mit Animationen: Um ein besseres Benutzererlebnis zu schaffen, kannst Du Sleep verwenden, um Animationen zu simulieren, wie das Einblenden von Zellen.


FAQ: Häufige Fragen

1. Funktioniert der SLEEP Befehl in allen Excel-Versionen?
Ja, der SLEEP Befehl kann in Excel VBA unabhängig von der Version verwendet werden, solange Du die richtige Deklaration vornimmst.

2. Wie kann ich eine Pause von weniger als einer Sekunde machen?
Du kannst die Millisekunden anpassen, z.B. Sleep 250, um eine Pause von 0.25 Sekunden zu erzeugen.

3. Gibt es eine Grenze für die Wartezeit?
Ja, die maximale Wartezeit für den SLEEP Befehl ist 2.147.483.647 Millisekunden, was etwas über 24 Tage entspricht. Achte darauf, dass Du angemessene Werte verwendest.

Nutze diese Anleitungen, um die Sleep Funktion effektiv in Deinen Excel VBA Projekten einzusetzen!

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige