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

Forumthread: Makro soll langsam ablaufen

Makro soll langsam ablaufen
15.03.2013 18:23:23
mehmet
Guten Tag Forum,
ich konnte mittels Makro Recorder ein Makro aufzeichen und anpassen.
Wenn ich jedoch auf dem Button "Lauf markieren" klicke,
läuft das Makro sehr schnell.
Kann man es so verlangsamen, dass man es optisch verfolgen kann.
Herzlichen Dank für die Hilfe
Gruss
Mehmet
https://www.herber.de/bbs/user/84393.xls

Anzeige

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

Betreff
Datum
Anwender
Anzeige
Application.Wait Now
15.03.2013 18:50:16
Matthias
Hallo
Du könntest zum Einen im Debugger mit F8 im Einzelschrittmodus den Lauf verfolgen
oder Du setzt nach jedem Select ein Application.Wait
also so:
Range("AC4").Select
Application.Wait Now + TimeSerial(0, 0, 0.5)

so macht der Code dann immer 1/2 Sek Pause
Application.Wait Now + TimeSerial(0, 0, 1)

wäre dann 1 Sek.
Was willst Du den erreichen, wenn mach fragen darf?
Grß Matthias

Anzeige
AW: Application.Wait Now
15.03.2013 19:28:50
mehmet
Hallo Matthias,
danke für deine Hilfe.
Ich versuche bildlich darzustellen, wie man ein Paket von Position A nach Position B befördert, das aber auf bestimmte Punkte überlaufen muss. Diese Punkte werden dann später gekennzeichnet.
Leider kann ich die Zeitinterwale 0.5 und 0.6 nicht nach meinem Wunsch anpassen.
Wert: kleiner gleich 0.5 zu schnell (könnte was langsamer laufen)
Wert: grösser gleich 0.6 zu langsam (könnte was schneller laufen)
Werte dazwischen geht leider nicht.
Dank Dir
Viele Grüsse
https://www.herber.de/bbs/user/84395.xls

Anzeige
AW: Application.Wait Now
15.03.2013 19:41:15
mehmet
Hallo Matthias,
kann ich Werte
Application.Wait Now + TimeSerial(0, 0, 0.6)
von einer Zelle aus wählen. Z.B. aus Zelle AC1
Application.Wait Now + TimeSerial(0, 0, worksheet("tabelle1").(Range"ac1"))
und in Zelle AC1 steht dann 0.6
oder so ähnlich?
Gruss
Mehmet

Anzeige
AW: Application.Wait Now
15.03.2013 19:58:06
Nepumuk
Hallo Mehmet,
versuch es mal so:
Option Explicit

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

Public Sub Beispiel()
    Dim lngDelay As Long
    lngDelay = Worksheets("Tabelle1").Range("AC1").Value
    MsgBox "Jetzt geht's los"
    Call Sleep(lngDelay)
    MsgBox "Jetzt sind " & CStr(lngDelay) & " Millisekunden vegangen"
End Sub

In AC1 habe ich 600 für 600 Millisekunden eingetragen.
Gruß
Nepumuk

Anzeige
AW: Application.Wait Now
15.03.2013 20:38:29
mehmet
Hallo Nepumuk,
Ich konnte es anpassen. Es läuft wie gewünscht
Besten Dank an Dich und Matthias
Viele Grüsse
Mehmet

Erklärung warum das mit Wait nicht klappt
15.03.2013 23:51:51
Nepumuk
Hallo,
vielleicht noch zur Erklärung. TimeSerial erwartet jeweils eine Integerzahl für Stunde, Minute und Sekunde. Und das passiert wenn du 0,5 bzw. 0,6 als Sekunde einträgst:
Public Sub test()
    MsgBox Cint(0.5)
    MsgBox Cint(0.6)
End Sub

Es ist weder mit der Wait- noch mit der OnTime-Methode möglich Zeiten kleiner einer Sekunde zu warten.
Gruß
Nepumuk

Anzeige
AW: Application.Wait Now
16.03.2013 06:11:47
schauan
Hallo zusammen,
und noch ein Hinweis.
Die API Sleep belastet den Rechner weniger als Application.Wait, man sieht's im Taskmanager im Reiter Leistung bei der CPU-Auslastung deutlich.
API's sind dahingehend aber nicht generell immer besser. Bei OnTime bekommt Excel den Punkt ;-)
 Hoffe, geholfen zu haben. Grüße, André aus G in T  (xls 97-2013)

Anzeige
Kommt darauf an
16.03.2013 09:57:05
Nepumuk
Hallo André,
das kannst du nicht so generalisieren. Es kommt dabei darauf an was du vor hast. Bei manchen Sachen greift OnTime einfach nicht, weil es von Excel blockiert wird.
Gruß
Nepumuk

AW: Kommt darauf an
16.03.2013 10:54:23
schauan
Hallo Nepomuk,
Aha. Ich hatte bei meinen Tests einfach nur Sleep mit Wait und den API-Timer mit OnTime verglichen. Am Ende hab ich nur die Zeit ausgegeben und gleich noch kontrolliert, ob es da Abweichungen gibt - und die gibt es auch :-(
 Hoffe, geholfen zu haben. Grüße, André aus G in T  (xls 97-2013)

Anzeige
AW: Kommt darauf an
16.03.2013 12:06:11
Nepumuk
Hallo André,
OnTime (und Wait) ist ungenau. Du setzt z.B. die Startzeit und 08:00:00,500 also 500 Millisekunden nach 8 Uhr auf 08:00:01 OnTime wird damit 500 Millisekunden nach dem Setzen ausgeführt da es ja nur noch 500 Millisekunden bis zum Erreichen des Starttermins sind.
Gruß
Nepumuk
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Makro langsamer ablaufen lassen in Excel


Schritt-für-Schritt-Anleitung

Um ein Makro in Excel langsamer ablaufen zu lassen, kannst Du die Application.Wait-Methode verwenden. Hier ist eine einfache Schritt-für-Schritt-Anleitung:

  1. Öffne das VBA-Editor-Fenster mit ALT + F11.

  2. Erstelle ein neues Modul, indem Du mit der rechten Maustaste auf "VBAProject" klickst und "Einfügen" > "Modul" wählst.

  3. Füge den folgenden VBA-Code ein:

    Sub LangsameAusfuehrung()
       Range("AC4").Select
       Application.Wait Now + TimeSerial(0, 0, 0.5) ' 0.5 Sekunden Pause
       ' Weitere Schritte...
    End Sub
  4. Du kannst die Zeit im TimeSerial-Befehl anpassen, um die Pause zwischen den Aktionen zu ändern.

  5. Führe das Makro aus, um die Verzögerung zu testen.


Häufige Fehler und Lösungen

  • Fehler: Wenn Du versuchst, eine Zeit unter 1 Sekunde mit Application.Wait zu nutzen, wird Excel die Ausführung nicht korrekt pausieren.

    • Lösung: Verwende stattdessen die Sleep-Funktion, um Millisekunden zu nutzen. Siehe dazu die alternative Methode unten.
  • Fehler: TimeSerial erwartet Integer-Werte für Stunden, Minuten und Sekunden.

    • Lösung: Stelle sicher, dass Du nur Werte in Sekunden angibst, die 0, 1 oder mehr sind.

Alternative Methoden

Wenn Du eine genauere Kontrolle über die Pause in Millisekunden benötigst, kannst Du die Sleep-Funktion verwenden. Hier ist ein Beispiel, wie Du sie einrichten kannst:

  1. Füge diesen Code in Dein Modul ein:

    Private Declare Sub Sleep Lib "kernel32.dll" (ByVal dwMilliseconds As Long)
    
    Sub Beispiel()
       Dim lngDelay As Long
       lngDelay = 600 ' Wartezeit in Millisekunden
       MsgBox "Jetzt geht's los"
       Sleep lngDelay
       MsgBox "Jetzt sind " & CStr(lngDelay) & " Millisekunden vergangen"
    End Sub
  2. Ändere den Wert von lngDelay, um die Dauer der Pause zu steuern.


Praktische Beispiele

Hier sind einige praktische Beispiele zur Anwendung der Application.Wait- und Sleep-Methoden:

  • Beispiel 1: Anwendung von Application.Wait für eine 1-sekündige Pause:

    Sub Beispiel1()
       Range("A1").Value = "Start"
       Application.Wait Now + TimeSerial(0, 0, 1) ' 1 Sekunde Pause
       Range("A1").Value = "Ende"
    End Sub
  • Beispiel 2: Verwendung von Sleep für eine präzise Millisekundenpause:

    Sub Beispiel2()
       Range("B1").Value = "Start"
       Sleep 500 ' 500 Millisekunden Pause
       Range("B1").Value = "Ende"
    End Sub

Tipps für Profis

  • Verwendung von Variablen: Nutze Zellenwerte zur Steuerung der Wartezeiten. Zum Beispiel:

    lngDelay = Worksheets("Tabelle1").Range("AC1").Value
  • Debugging: Verwende den Debugger (F8), um Makros Schritt für Schritt auszuführen und die Verzögerungen zu überprüfen.

  • CPU-Optimierung: Beachte, dass die Verwendung von Sleep die CPU weniger belastet als Application.Wait.


FAQ: Häufige Fragen

1. Wie lange kann ich mit Application.Wait warten? Mit Application.Wait kannst Du Wartezeiten ab einer Sekunde einstellen. Für kürzere Pausen solltest Du Sleep verwenden.

2. Kann ich die Pause in Sekunden und Millisekunden kombinieren? Nein, Application.Wait akzeptiert nur ganze Sekunden. Für Millisekunden ist die Sleep-Funktion die bessere Wahl.

3. Wie kann ich die Wartezeit dynamisch aus einer Zelle beziehen? Du kannst den Wert aus einer Zelle in eine Variable speichern und diese Variable dann in der Sleep- oder Application.Wait-Anweisung verwenden.

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