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

Forumthread: Pause während der Ausführung des Codes einbauen

Pause während der Ausführung des Codes einbauen
08.03.2006 15:00:06
Bjoern
Hallo Forumsmitglieder,
ich habe folgendes Problem:
Ich habe in Excel ein Makro programmiert, dass eine Abfrage mittels einer Funktion ausführt. Das Ergebnis dieser Abfrage möchte ich für eine weitere Funktion verwenden.
Die Abfrage braucht etwas Zeit, bis das Ergebnis geliefert wird. In der Zwischenzeit hat das Makro aber schon die Zelle ausgelesen, in der das Ergebnis dann eigentlich stehen. Entsprechend funktioniert die neue Funktion nicht.
Nun habe ich mit "DoEvent" und "Application.OnTime" probiert, das ganze zu verzögern. Aber beides hat nicht geholfen, da die Abfrage dann auch nicht ausgeführt wurde und entsprechend die neue Funktion natürlich nicht richtig rechnet. Vielleicht habe ich ja was falsch gemacht.
DAHER: Wie kann ich in VBA eine "Pause" einbauen, die es ermöglicht, die Ausführung des Makrocodes für X Sekunden zu unterbrechen und NICHT die Berechnung / Abfrage des Excelsheets zu unterbrechen.
Ich bedanke mich für die Hilfe.
Grüße
Björn
Anzeige

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

Betreff
Datum
Anwender
Anzeige
AW: Pause während der Ausführung des Codes einbaue
08.03.2006 15:08:22
zink
Hallo Björn,
schau mal in der Online-Hilfe die Hinweise zur WAIT - Methode an.
Beispiele:
(1) Ausführung des Makros bis 18.23 Uhr desselben Tages unterbrechen:
Application.Wait "18:23:00"
(2) Ausführung eines aktuell ausgeführten Makros für ungefähr 10 Sekunden unterbrechen.
newHour = Hour(Now())
newMinute = Minute(Now())
newSecond = Second(Now()) + 10
waitTime = TimeSerial(newHour, newMinute, newSecond)
Application.Wait waitTime
HTH
Joachim
Anzeige
AW: Pause während der Ausführung des Codes einbaue
08.03.2006 15:52:15
Bjoern
Ich danke Zink und Nepumuk,
aber leider hatte ich mit diesen beiden Methoden keinerlei Erfolg gehabt. Die Abfrage wird in der Zwischenzeit nicht ausgeführt.
DAHER: Würde mich freuen, wenn es eine weitere Lösung gibt.
Ich bedanke mich.
Grüße
Björn
AW: Pause während der Ausführung des Codes einbaue
08.03.2006 16:00:08
Nepumuk
Hallo Björn,
was ist das für eine Abfrage?
Gruß
Nepumuk

Anzeige
AW: Pause während der Ausführung des Codes einbauen
08.03.2006 15:10:22
Nepumuk
Hallo Björn,
versuch es mal so:
Option Explicit

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

Public Sub test()
    Sleep 1000
End Sub

Wenn das nicht hilft, dann versuch es so:
Option Explicit

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

Public Sub test()
    Dim intIndex As Integer
    For intIndex = 1 To 100
        Sleep 10
        DoEvents
    Next
End Sub

Gruß
Nepumuk

Anzeige
AW: Pause während der Ausführung des Codes einbaue
08.03.2006 16:02:14
Ramses
Hallo
warum sollte dies mit Application.OnTime nicht funktionieren ?

Sub test()
MsgBox "Nächste Msg-Box in 10 Sekunden"
'Starten Deiner WEB-Abfrage
Application.OnTime Now + TimeSerial(0, 0, 10), "NextMsgBox"
End Sub


Sub NextMsgBox()
'Weiterverarbeiten des Codes
MsgBox "Da bin ich"
End Sub

In den 10 Sekunden dazwischen kannst du ganz normal weiterarbeiten
Gruss Rainer
Anzeige
AW: Pause während der Ausführung des Codes einbaue
09.03.2006 10:18:14
Bjoern
Hi @ all,
danke für die Hilfe. Besonders die Hilfestellung von Rainer hat den Durchbruch geschafft. Erst durch die Unterteilung in mehrere Subs funzt die Application.OnTime und ich bekomme die Info.
Grüße
Björn
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Pause während der Ausführung von VBA-Code einbauen


Schritt-für-Schritt-Anleitung

Um eine Pause während der Ausführung deines VBA-Codes einzubauen, kannst du die Application.Wait-Methode oder die Sleep-Funktion verwenden. Hier sind die Schritte für beide Methoden:

1. Anwendung von Application.Wait

Du kannst den folgenden Code verwenden, um eine Pause von 5 Sekunden einzufügen:

Sub PauseMitWait()
    Application.Wait Now + TimeValue("00:00:05") ' Warte 5 Sekunden
End Sub

2. Anwendung der Sleep-Funktion

Für eine präzisere Steuerung der Wartezeit kannst du die Sleep-Funktion aus der kernel32.dll verwenden. Füge zuerst die Deklaration am Anfang deines Moduls hinzu:

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

Dann kannst du wie folgt eine Pause von 1 Sekunde einbauen:

Sub PauseMitSleep()
    Sleep 1000 ' Pause für 1 Sekunde
End Sub

Mit diesen Methoden kannst du eine vba pause in deinem Excel-Makro implementieren.


Häufige Fehler und Lösungen

  • Fehler: Abfrage wird nicht ausgeführt

    • Lösung: Stelle sicher, dass die Pause nicht die Berechnung der Abfrage blockiert. Nutze DoEvents, um sicherzustellen, dass Excel weiterhin aktiv bleibt.
  • Fehler: Application.Wait funktioniert nicht

    • Lösung: Überprüfe die Zeitangabe. Stelle sicher, dass du einen gültigen Zeitwert übergibst.

Alternative Methoden

Es gibt verschiedene Ansätze, um eine Pause in deinen VBA-Code einzubauen:

  • Application.OnTime: Diese Methode erlaubt es dir, einen bestimmten Code zu einem späteren Zeitpunkt auszuführen. Hier ein Beispiel:
Sub TestOnTime()
    MsgBox "Nächste Aktion in 10 Sekunden"
    Application.OnTime Now + TimeValue("00:00:10"), "NächsteAktion"
End Sub

Sub NächsteAktion()
    MsgBox "Aktion ausgeführt"
End Sub
  • VBA DoEvents: Mit DoEvents kannst du Excel erlauben, andere Aufgaben während der Pause zu erledigen. Dies ist nützlich, wenn du eine lange Schleife hast:
Sub PauseMitDoEvents()
    Dim i As Long
    For i = 1 To 100
        Sleep 10 ' Pause für 10 Millisekunden
        DoEvents ' Erlaubt es Excel, andere Aufgaben zu erledigen
    Next i
End Sub

Praktische Beispiele

Hier sind einige praktische Beispiele, wie du eine Pause in deinem VBA-Code umsetzen kannst:

  • Wartezeit von 5 Sekunden einfügen:
Sub BeispielPause5Sekunden()
    Application.Wait Now + TimeValue("00:00:05")
    MsgBox "5 Sekunden sind vergangen"
End Sub
  • Thread-Pause mit Sleep:
Sub BeispielSleep()
    Sleep 2000 ' Warte 2 Sekunden
    MsgBox "2 Sekunden sind vergangen"
End Sub

Tipps für Profis

  • Nutze DoEvents, um sicherzustellen, dass Excel auch während der Pause auf Benutzeraktionen reagiert.
  • Teste verschiedene Wartezeiten, um die optimale Leistung deines Makros sicherzustellen, insbesondere bei großen Datenmengen.
  • Berücksichtige, dass Application.Wait Excel blockiert, während Sleep dies nicht tut, was für Benutzerfreundlichkeit entscheidend sein kann.

FAQ: Häufige Fragen

1. Wie kann ich die Wartezeit anpassen? Du kannst die Zeit in der Application.Wait oder Sleep Funktion anpassen, indem du den Wert, der übergeben wird, veränderst.

2. Funktioniert das auch in Access VBA? Ja, du kannst ähnliche Methoden in Access VBA verwenden, wie Access VBA Application.Wait oder Access VBA Sleep.

3. Gibt es eine Möglichkeit, die Eingabeaufforderung während der Pause zu stoppen? Du kannst DoEvents verwenden, um sicherzustellen, dass Excel während der Wartezeit weiterhin auf Eingaben reagiert.

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