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

Verzögerung zwischen Befehlen

Forumthread: Verzögerung zwischen Befehlen

Verzögerung zwischen Befehlen
07.08.2014 20:33:22
Peter
Hallo,
nun zum nächsten Problem.
In dem Makro soll zuerst die Webabfrage aktualisiert werden um danach die Daten kopieren zu können.
Deswegen möchte ich zwischen dem Ausführen des Befehls RefreshAll und dem kopieren, ein paar Sekunden Verzögerung zwischen den zwei Befehlen einbauen.
Momentan werden die Daten zuerst kopiert, während die Aktualisierung noch voll im Gang ist.
Mit Application.Wait pausiert jedoch die ganz Prozedure.
Kann man dies ebenso mit einem Befehl erreichen?
Grüße
Peter
Sub kopieren17302200()
With ActiveWorkbook
ActiveWorkbook.RefreshAll
Application.Wait (Now + TimeValue("0:00:10"))
.Worksheets("1730-2200").Range("d1:e30").Copy
.Worksheets("1730-2200").Range("g1").PasteSpecial Paste:=xlValues
End With
End Sub

Anzeige

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Verzögerung zwischen Befehlen
07.08.2014 21:25:43
Luschi
Hallo Peter,
jede externe Abfrage (Web, SQL, Pivot) besitzt die BackgroundQuery-Eigenschaft, die den Wert True oder False besitzt bzw. darauf eingestellt werden kann. Leider ist True der Standardwert und bedeutet, daß die Abfrage im Hintergrund passiert und Excel somit die Abfrage startet, aber nicht auf das Aktualisierungsende wartet. Hier muß der Wert auf False gestellt werden.
Gruß von Luschi
aus klein-Paris

Anzeige
AW: Verzögerung zwischen Befehlen
08.08.2014 11:04:39
Peter
Hallo Luschi,
vielen Dank für Deinen Hinweis. Hat funktioniert. Habe alle Häckchen "im Hintergrund ausführen" rausgenommen. Passt nun.:-)
Kann ich den Button der das Makro startet, für die Zeit von 8-9 Uhr sperren?
Wenn ja wie.
Bin leider absoluter Laie und fummel mich gerade in VBA langsam rein.

Anzeige
AW: Verzögerung zwischen Befehlen
08.08.2014 11:19:48
Peter
Habe nun diesen Code mal eingefügt. Das Makro startet auch zu dieser Uhrzeit.
Nun möchte ich dieses Makro jedoch automatisch zwischen 9 und 17:30 Uhr jede Stunde einmal ausführen lassen.
Wie ginge das?
Public Sub Workbook_Open()
Application.OnTime TimeValue("11:18:00"), "kopieren0917300"
End Sub

Anzeige
AW: Verzögerung zwischen Befehlen
08.08.2014 11:27:36
Peter
Also mein letzter Beitrag ist mir sogar lieber, daß die Makros automatisch im Hintergrund starten.

AW: Verzögerung zwischen Befehlen
08.08.2014 11:53:35
Robert
Hallo Peter,
Wenn das Excel File ganztägig geöffnet Bleibt, was spricht dagegen die Codezeile .OnTime im Workbook_open Event einfach für jedes geplante Ausführen einmal reinzuschreiben?
Es gibt sicher eine kürzere und Codeoptisch schönere Lösung, aber so wäre es auch für dich einfach umzusetzen und auszuführen.
Viele grüße
Robert

Anzeige
AW: Verzögerung zwischen Befehlen
08.08.2014 12:22:33
Peter
Hallo Robert,
ja so habe ich es nun auch umgesetzt. Wollte wohl als Anfänger gleich die elegante Lösung:-)
Grüße
Peter
;
Anzeige
Anzeige

Infobox / Tutorial

Verzögerung zwischen Befehlen in Excel VBA


Schritt-für-Schritt-Anleitung

Um eine Wartezeit zwischen Befehlen in deinem Excel VBA-Makro einzufügen, kannst du die folgenden Schritte befolgen:

  1. Öffne den Visual Basic for Applications (VBA) Editor in Excel (Alt + F11).

  2. Suche das Makro, in dem du die Verzögerung einbauen möchtest.

  3. Füge die folgende Zeile in den Code ein, um eine zeitliche Verzögerung zu implementieren:

    Application.Wait (Now + TimeValue("0:00:10"))

    Diese Zeile pausiert die Ausführung des Makros für 10 Sekunden. Du kannst die Zeit anpassen, um die gewünschte Wartezeit zu erreichen.

  4. Ein Beispiel für ein einfaches Makro mit einer Wartezeit zwischen zwei Befehlen könnte so aussehen:

    Sub kopierenMitWartezeit()
       With ActiveWorkbook
           .RefreshAll
           Application.Wait (Now + TimeValue("0:00:10")) ' 10 Sekunden warten
           .Worksheets("Sheet1").Range("A1:B10").Copy
           .Worksheets("Sheet1").Range("C1").PasteSpecial Paste:=xlValues
       End With
    End Sub

Häufige Fehler und Lösungen

  • Fehler: Das Makro wird sofort ausgeführt, ohne die Wartezeit zu beachten.

    • Lösung: Stelle sicher, dass du die Application.Wait-Methode an der richtigen Stelle im Code einfügst, nach dem RefreshAll.
  • Fehler: Excel reagiert nicht mehr während der Wartezeit.

    • Lösung: Verwende DoEvents, um sicherzustellen, dass Excel während der Wartezeit weiterhin reagiert. Beispiel:
    Application.Wait (Now + TimeValue("0:00:10"))
    DoEvents

Alternative Methoden

Es gibt verschiedene Möglichkeiten, um eine Wartezeit in Excel VBA zu implementieren:

  1. Sleep-Methode: Du kannst die Windows API verwenden, um eine Verzögerung zu erzeugen:

    Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
    
    Sub TestSleep()
       ActiveWorkbook.RefreshAll
       Sleep 10000 ' 10 Sekunden warten
    End Sub
  2. Timer: Eine andere Möglichkeit ist die Verwendung des OnTime-Befehls, um ein Makro zu einem späteren Zeitpunkt auszuführen:

    Application.OnTime Now + TimeValue("00:00:10"), "deinMakro"

Praktische Beispiele

Hier sind einige praktische Beispiele, wie du eine Wartezeit in deine VBA-Makros einbauen kannst:

  • Webabfrage aktualisieren und dann kopieren:

    Sub AktualisierenUndKopieren()
       ActiveWorkbook.RefreshAll
       Application.Wait (Now + TimeValue("0:00:10")) ' 10 Sekunden warten
       Worksheets("Daten").Range("A1:B10").Copy Destination:=Worksheets("Ziel").Range("A1")
    End Sub
  • Automatisierung mit Zeitsteuerung:

    Public Sub Workbook_Open()
       Application.OnTime TimeValue("09:00:00"), "deinMakro"
    End Sub

Tipps für Profis

  • Achte darauf, dass du die Wartezeit nur dann einbaust, wenn wirklich notwendig. Zu viele Verzögerungen können die Benutzererfahrung beeinträchtigen.
  • Wenn du mit großen Datenmengen arbeitest, kann es hilfreich sein, die Wartezeit dynamisch anzupassen, basierend auf der tatsächlichen Zeit, die die Abfrage benötigt.
  • Nutze Application.ScreenUpdating = False, bevor du die Wartezeit einfügst, um das Flackern des Bildschirms zu vermeiden, und stelle es nach der Wartezeit wieder auf True.

FAQ: Häufige Fragen

1. Wie kann ich die Wartezeit anpassen? Du kannst die Wartezeit einfach ändern, indem du den TimeValue-Parameter in der Application.Wait-Methode anpasst.

2. Gibt es eine Möglichkeit, die Wartezeit zu überspringen? Ja, du kannst Bedingungen im Code hinzufügen, um die Wartezeit nur unter bestimmten Umständen zu aktivieren.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige