Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Makro langsamer laufen lassen ein Befehl

Forumthread: Makro langsamer laufen lassen ein Befehl

Makro langsamer laufen lassen ein Befehl
03.10.2015 09:30:28
Felix
Liebes Herber-Team
Ich habe ein Problem mit den Excel-Makros.
Wie kann ich ein Makro langsamer ablaufen lassen, ohne dabei extrem oft einen Befehl eingeben zu müssen? Ist es möglich, mit wenig Aufwand und bestenfalls nur einem Befehl alle Schritte eines Makros langsamer laufen zu lassen?

Anzeige

14
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Makro langsamer laufen lassen ein Befehl
03.10.2015 09:40:01
ransi
Hallo,
Füg vor jedem Befehl ne Pause ein.
Option Explicit
Private Declare Sub Sleep Lib "kernel32.dll" ( _
    ByVal dwMilliseconds As Long)

Sub machs()
    Dim zelle As Range
    For Each zelle In Range("A1:A10")
        Sleep 1000 '1000 Millisekunden Auszeit
        zelle.Select
    Next
End Sub



Obwohl sich mir der Sinn dieser Aktion nicht erschließt...
ransi

Anzeige
AW: Makro langsamer laufen lassen ein Befehl
03.10.2015 09:42:50
Felix
Ich experimentiere nur, sorry. Ich möchte ja genau vermeiden, nach jedem Befehl diesen Text einzufügen, weil das Makro lang ist.
Gibt es eine Möglichkeit, zu Beginn des Makros zu definieren, dass alle folgenden Schritte mit einer Verzögerung von zB einer halben Sekunde ablaufen sollen?

Anzeige
AW: Makro langsamer laufen lassen ein Befehl
03.10.2015 10:13:20
ransi
HAllo Felix,
Warum willst du denn ein Makro langsamer machen ?
Das widerspricht allem was ich je gehört habe.
ransi

AW: Makro langsamer laufen lassen ein Befehl
03.10.2015 10:23:33
Felix
Hallo ransi,
Ich möchte, dass sich ein aus verschiedenen farbigen Feldern gestaltetes Bild langsam aufbaut also von Feld zu Feld. Sodass von Feld zu Feld ein zeitlicher Abstand von einer halben Sekunde ist.
Danke schon im Voraus, ransi. :)

Anzeige
AW: Makro langsamer laufen lassen ein Befehl
03.10.2015 10:31:47
ransi
HAllo,
Aaaaaah ja.
Außer der Sleep-Api kenne ich keine Möglichkeit den Code zu verlangsamen.
ransi

Datei?
03.10.2015 10:49:30
RPP63
Hallo!
Du solltest Deine Datei mal hochladen.
Gruß Ralf

AW: Makro langsamer laufen lassen ein Befehl
03.10.2015 12:02:08
Daniel
Hi
eine Möglichkeit, den Code generell zu verlangsamen, kenne ich auch nicht, ausser nach jedem Programmschritt eine Pause zu programmieren.
damit du die Pause nicht jedes mal Programmieren musst, kannst du ja vielleicht so vorgehen:
1. lege benötigten Informationen, dh welche Zelle beearbeitet werden soll und was mit ihr passieren soll in einem oder mehreren Array-Variablen ab.
2. Programmiere das Umfärben der Zellen nicht einzeln pro Zelle, sondern in dem du eine Schleife über die Arrays laufen lässt und mit den Daten aus dem Array arbeitest. Dann musst du die Pause auch nur 1x in der Schleife programmieren und dein Code wird vielleicht insgesamt kürzer.
funktioniert natürlich nur, wenn die Arbeitsschritte einheitlich sind und irgendwie in einem Array speicherbar sind.
hier mal ein Beipiel für den Aufbau einer Ampel in A1:A3:
Sub test()
Dim Zelle
Dim Farbe
Dim i
Dim t As Double
Zelle = Array("A1:A3", "A1", "A2", "A3")
Farbe = Array(vbWhite, vbRed, vbYellow, vbGreen)
For i = LBound(Zelle) To UBound(Zelle)
Range(Zelle(i)).Interior.Color = Farbe(i)
t = Timer + 0.75
Do While Timer 
Gruss Daniel
ps: die Pausenschleife darf nicht über Mitternacht laufen, weil um Mitternacht der Timer auf 0 zurückgesetzt wird.

Anzeige
AW: Makro langsamer laufen lassen ein Befehl
04.10.2015 07:37:41
Sepp
Hallo Felix,
zeig deinen Code.
Gruß Sepp

AW: Makro langsamer laufen lassen ein Befehl
04.10.2015 08:55:20
Felix
https://www.herber.de/bbs/user/100574.xlsx
Das ist die Datei. Möchte, dass sich der Stapel von roten Feldern in Halbsekundenschritten aufbaut.
Das Makro heißt Herber_Test.
Vielen Dank,
Felix

Anzeige
Der Code fehlt! Leere Mappen hab ich selber! o.T.
04.10.2015 08:59:23
Sepp
Gruß Sepp

AW: Der Code fehlt! Leere Mappen hab ich selber! o.T.
04.10.2015 09:25:51
Felix
Tut mir leid, falsche Datei erwischt. Die hier dürfte funktionieren:
https://www.herber.de/bbs/user/100575.xlsm
Danke für eure Hilfe.

Anzeige
AW: Der Code fehlt! Leere Mappen hab ich selber! o.T.
04.10.2015 09:34:10
Sepp
Hallo Felix,
' **********************************************************************
' Modul: Modul1 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit

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

Sub Herber_Test()
Dim rng As Range

For Each rng In Range("E6:E12")
  rng.Interior.Color = 255
  Sleep 500 'Pause in Millisekunden
Next

End Sub

Gruß Sepp

Anzeige
AW: Der Code fehlt! Leere Mappen hab ich selber! o.T.
04.10.2015 10:04:47
Felix
Sepp, vielen Dank, das ist großartig.
Freu mich wirklich sehr. :DD
Felix

in einer . xlsx gibt es keine Makros.........owT
04.10.2015 09:00:11
Robert
;
Anzeige
Anzeige

Infobox / Tutorial

Makro langsamer laufen lassen mit Excel VBA


Schritt-für-Schritt-Anleitung

Um ein Excel-Makro langsamer ablaufen zu lassen, kannst du die Sleep-Funktion aus der Windows-API verwenden. Diese Methode erlaubt es dir, eine Wartezeit in Millisekunden einzufügen, ohne jeden Befehl einzeln zu pausieren. Hier sind die Schritte:

  1. Öffne den VBA-Editor in Excel (Alt + F11).

  2. Füge ein neues Modul hinzu (Rechtsklick auf "VBAProject" > "Einfügen" > "Modul").

  3. Kopiere den folgenden Code in das Modul:

    Option Explicit
    Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
    
    Sub DeinMakro()
       Dim rng As Range
       For Each rng In Range("A1:A10")
           rng.Select
           Sleep 1000 'Pause von 1000 Millisekunden
       Next rng
    End Sub
  4. Ändere Sleep 1000 auf die gewünschte Zeit (in Millisekunden), um die Dauer der Pause zu steuern.

  5. Führe das Makro aus und beobachte, wie es langsamer abläuft.


Häufige Fehler und Lösungen

  • Fehler: Makro wird nicht langsamer
    Lösung: Stelle sicher, dass die Sleep-Funktion korrekt deklariert ist. Überprüfe, ob du die richtige Anzahl an Millisekunden angegeben hast.

  • Fehler: Makro stoppt unerwartet
    Lösung: Achte darauf, dass die Wartezeit nicht zu lang ist oder dass es nicht über Mitternacht läuft, da der Timer um Mitternacht zurückgesetzt wird.


Alternative Methoden

Falls du keine externe API verwenden möchtest, gibt es auch andere Möglichkeiten, um eine Verzögerung in deinem Makro zu implementieren:

  1. Timer-Funktion: Du kannst die Timer-Funktion verwenden, um die Zeit zu messen und eine Schleife zu erstellen, die den Code pausiert.

    Dim t As Double
    t = Timer + 0.5 ' 0.5 Sekunden warten
    Do While Timer < t
       DoEvents ' Ermöglicht anderen Prozessen weiterzulaufen
    Loop
  2. Application.Wait: Diese Methode ist ebenfalls hilfreich:

    Application.Wait Now + TimeValue("00:00:01") ' Eine Sekunde warten

Praktische Beispiele

Hier ist ein Beispiel, wie du eine Ampel mit einer halben Sekunde Verzögerung aufbauen kannst:

Sub Ampel()
    Dim Zelle As Range
    Dim Farbe As Variant
    Dim i As Long
    Farbe = Array(vbRed, vbYellow, vbGreen)

    For i = LBound(Farbe) To UBound(Farbe)
        Set Zelle = Range("A1")
        Zelle.Interior.Color = Farbe(i)
        Sleep 500 ' 500 Millisekunden Pause
    Next i
End Sub

In diesem Beispiel wird jede Farbe nacheinander in Zelle A1 angewendet, mit einer Pause von 500 Millisekunden zwischen den Änderungen.


Tipps für Profis

  • Verwende Arrays, um mehrere Zellen oder Werte zu speichern, die du ändern möchtest. So kannst du den Code effizienter gestalten und die Pause nur einmal in der Schleife einfügen.
  • Halte deine Makros modular, indem du verschiedene Funktionen für unterschiedliche Aufgaben erstellst. Das hilft, den Code übersichtlicher und wartungsfreundlicher zu gestalten.
  • Teste dein Makro gründlich, um sicherzustellen, dass alle Pausen wie gewünscht funktionieren.

FAQ: Häufige Fragen

1. Wie kann ich die Pause flexibel gestalten?
Du kannst die Millisekunden in der Sleep-Funktion anpassen, um die Dauer der Pause zu variieren.

2. Gibt es eine Möglichkeit, die Pause in einer Schleife zu automatisieren?
Ja, nutze Arrays und Schleifen, um die Wartezeit nur einmal zu definieren und sie für alle Schleifeniteration anzuwenden.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige