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

Forumthread: Sleep-Funktion integrieren

Sleep-Funktion integrieren
11.05.2021 08:52:13
Martin
Hallo =)
ich google und google aber irgendwie bin ich dennoch zu dämlich die SleepFunktion in meinem Progrämmchen einzubauen und so sauber zu warten und nicht wie wait mit größerer Ungenauigkeit.
Public Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As LongPtr)
Sollte ja die Codezeile für neuere 64 Bit Versionen sein?!
Doch wo muss ich die Codezeile einbauen?
Am besten global, dass ich die Zeile nicht überall einbauen muss, wo ich eine Haltezeit möchte (konkret denke ich es zu brauchen, weil ich nicht immer ein Tabellenblatt lösche und teilweise überspringe... Option2 die ich mir vorstellen könnte was hilft, meine Funktionen SpeedOn und SpeedOff.
Testprogramm:

Private Sub CommandButton1_Click()
MsgBox "Jetzt"
Sleep (10000)
MsgBox "Jetzt +10"
End Sub
Lösung2 Offtopic?
'Speedblock on
With Application
.ScreenUpdating = False
.DisplayStatusBar = False
.Calculation = xlCalculationManual
.EnableEvents = False
End With
ActiveSheet.DisplayPageBreaks = False
End Sub

Private Sub SpeedOff()
'Speedblock off
With Application
.ScreenUpdating = True
.DisplayStatusBar = True
.Calculation = xlCalculationAutomatic
.EnableEvents = True
End With
ActiveSheet.DisplayPageBreaks = True
End Sub
Anzeige

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Sleep-Funktion integrieren
11.05.2021 09:02:24
Oberschlumpf
Hi Martin,
die Zeile
Public Declare PtrSafe.....
gehört in ein allgemeines Modul, direkt unterhalb von Option Explicit.
Wenn deine Code-Module den immer ersten Eintrag Option Explicit nicht enthalten, solltest du ihn verwenden.
Mehr Infos zu Option Explicit gibt es im Internet.
Hilfts?
Ciao
Thorsten
Anzeige
AW: Sleep-Funktion integrieren
11.05.2021 09:35:28
Martin
Hi Thorsten,
Danke
ok werde ich mir genauer anschauen und hoffe ich werde schlau daraus.
Heisst aber auch, dass meine globalen Variablen, die ich einfach ganz am Anfang mit DIm... geschrieben habe, keine gute Einbindung darstellt?
AW: Sleep-Funktion integrieren
11.05.2021 09:45:48
Martin
Ok ich bin definitiv zu blöd....
finde kein Beispiel für die Sleepfunktion, wo ich in einem ganzen Programmcode sehe wie es eingebunden und deklariert wurde.
Option explicit ganz oben reinschreiben erlaubt mir auch nicht, dass
Public Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As LongPtr)
einfügen und dann Sleep nutzen kann.
help :(
Anzeige
AW: Sleep-Funktion integrieren
11.05.2021 09:51:25
Martin
Hier noch die genaue Fehlermeldung:
Fehler beim Kompilieren:
Konstanten, Zeichenfolgen fester Länge, benutzerdefinierte Datenfelder und Declare-Anweisungen sind als Public-Elemente von Objektmodulen nicht zugelassen.
(auch das Public löschen etc. hat nicht geholfen.....)
AW: Sleep-Funktion integrieren
11.05.2021 09:59:22
Martin
Ok Lösung war wie folgt.
Der Programmcode ist in einem Objekt/Arbeitsmappe.
Links im Menü habe ich den Declare Code in Modul 1 eingefügt und simsalabim konnte ich den Code nutzen.
#If VBA7 Then
Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As LongPtr)
#Else
Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
#End If
p.s. würde es sinn machen den ganzen Code im Modul und nicht in der Arbeitsmappe zu haben?
Wird via Buttons ausgelöst.
Anzeige
AW: Sleep-Funktion integrieren
11.05.2021 10:38:11
Nepumuk
Hallo Martin,
in das Modul "DieseArbeitsmappe" gehören nur Events der Mappe. Genauso wie in den Modulen der Tabellen nur Events von Tabellen kommen. Alles andere gehört in Standardmodul (Menüleiste im VBA-Editor - Einfügen - Modul).
Gruß
Nepumuk
AW: Sleep-Funktion integrieren
11.05.2021 10:44:02
Oberschlumpf
hmm...ein Hallo + Tschüss wären nett...
Ob alles an Code in allgemeinen Modulen oder in den Tabellen-Modulen steht, ist davon abhängig, was du erreichen willst.
Z Bsp die Reaktion auf das Anklicken einer bestimmten Zelle MUSS im Worksheet_Change-Ereignis im Tabellenmodul stehen und würde gar nicht helfen im allgemeinen Modul.
Ich schreibe Code, die abhängig von Ereignissen sind, in das jeweilige Tabellenmodul und selbst erstellte Subs + Functions lager ich gern ins allgemeine Modul aus.
Aber das ist nur meine Art zu programmieren.
Anzeige
AW: Sleep-Funktion integrieren
11.05.2021 10:56:25
Martin
Hi Schlumpf,
da ich dreimal auf mich geantwortet habe, keine Grußformeln an mich ;)
Danke euch beiden für die ergänzenden Erklärungen! Hat mir weitergeholfen.
Euch noch eine schöne Woche. lg
;
Anzeige
Anzeige

Infobox / Tutorial

Sleep-Funktion in Excel VBA integrieren


Schritt-für-Schritt-Anleitung

Um die Sleep-Funktion in Excel VBA zu integrieren, gehe wie folgt vor:

  1. Öffne den VBA-Editor: Drücke ALT + F11, um den VBA-Editor zu öffnen.

  2. Füge ein neues Modul hinzu: Klicke im Menü auf Einfügen und wähle Modul.

  3. Deklariere die Sleep-Funktion: Füge den folgenden Code in das Modul ein:

    #If VBA7 Then
        Private Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As LongPtr)
    #Else
        Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
    #End If

    Diese Deklaration ist speziell für die 64-Bit Version von Excel. Wenn du eine 32-Bit Version verwendest, wird die entsprechende Deklaration verwendet.

  4. Verwende die Sleep-Funktion: Du kannst nun die Sleep-Funktion in deinen Makros verwenden. Ein einfaches Beispiel, um die Funktion zu testen:

    Private Sub CommandButton1_Click()
        MsgBox "Jetzt"
        Sleep 10000 ' Pausiert für 10 Sekunden
        MsgBox "Jetzt +10"
    End Sub

Häufige Fehler und Lösungen

  • Fehlermeldung bei der Deklaration: Wenn du die Fehlermeldung erhältst, dass Declare-Anweisungen nicht als Public-Elemente von Objektmodulen zugelassen sind, stelle sicher, dass du die Deklaration im richtigen Modul (Standardmodul) eingefügt hast und nicht im Modul DieseArbeitsmappe oder in einem Tabellenmodul.

  • Fehler beim Kompilieren: Überprüfe, ob die Zeile Option Explicit ganz oben im Modul steht. Dies ist wichtig, um Variablen korrekt zu deklarieren.


Alternative Methoden

Wenn du die Sleep-Funktion nicht verwenden möchtest, kannst du auch die Application.Wait Methode nutzen, die jedoch weniger genau ist. Hier ist ein Beispiel:

Sub PauseMitWait()
    Application.Wait (Now + TimeValue("0:00:10")) ' Wartet 10 Sekunden
End Sub

Diese Methode kann jedoch zu ungenaueren Ergebnissen führen im Vergleich zur Sleep-Funktion.


Praktische Beispiele

Hier sind einige praktische Anwendungen der Sleep-Funktion:

  1. Animationen in UserForms: Du kannst die Sleep-Funktion nutzen, um Animationen in UserForms sanfter zu gestalten.

    Private Sub UserForm_Activate()
        Me.Label1.Caption = "Lade..."
        Sleep 2000 ' Pause für 2 Sekunden
        Me.Label1.Caption = "Fertig!"
    End Sub
  2. Verzögerung zwischen Makros: Wenn du mehrere Makros hintereinander laufen lassen möchtest, kannst du sie mit Sleep verzögern.

    Sub KomplexeAufgabe()
        Call ErsterSchritt
        Sleep 5000 ' 5 Sekunden Pause
        Call ZweiterSchritt
    End Sub

Tipps für Profis

  • Wenn du häufig mit langen Wartezeiten arbeitest, erwäge, die Sleep-Funktion in eine eigene Subroutine auszulagern, um den Code lesbarer und wartbarer zu gestalten.

  • Nutze Option Explicit, um sicherzustellen, dass alle Variablen deklariert sind. Dies verhindert viele gängige Fehler und hilft, den Code sauber zu halten.


FAQ: Häufige Fragen

1. Wo sollte ich die Sleep-Funktion deklarieren? Die Sleep-Funktion sollte in einem Standardmodul deklariert werden, nicht in einem Objektmodul oder Tabellenmodul.

2. Was ist der Unterschied zwischen der Sleep-Funktion und Application.Wait? Die Sleep-Funktion pausiert den Code für eine genau definierte Zeit in Millisekunden, während Application.Wait auf eine bestimmte Uhrzeit wartet und daher ungenauer sein kann.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige