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

Doevents oder wait?

Forumthread: Doevents oder wait?

Doevents oder wait?
Steve
Guten abend an alle,
habe wieder eine frage.
Ich hatte ungefähr diese frage schon mal gepostet aber niemand konnte mir antwort geben, daher ging ich ein wenig suchen und wollte fragen ob es möglich ist mit Doevent oder mit Wait einen code zu bauen der wartet bis die letzte geöffnete excel tabelle wieder geschlossen wird befor er die UserForm wieder anzeigt?
Ich habe nur nicht ganz verstanden was der unterschied ist von den beiden:
wait hält im code ann und wartet auf das ereigniss der den code weiterlaufen lässt (man kann nichts machen)
Doevents fragt auch immer wieder das ereigniss ab aber man kann weiter arbeiten
Ist das ungefähr richtig?
Besten Dank
Steve
Anzeige

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Doevents oder wait? Besser OnTime !
21.02.2012 10:44:39
fcs
Hallo Steve,
Wait ist garnicht geeignet, da Excel dann eine Kaffepause einlegt - siehe Excel-VBA-Hilfe.
Mit DoEvents ginge es, ist aber ggf. risikobehaftet - siehe Excel-VBA-Hilfe- und man muss sehr genau aufpassen, dass man beim Programmieren nicht in eine Endlosschleife gerät. Deshalb hab ich im Makro die Laufzeit der Prüfschleife auf 1 Minute begrenzt.
Ontime hat den großen Vorteil, dass man in Excel praktisch ohne Einschränkungen arbeiten kann, während das Makro im Hintergrund z.B. alle paar Sekunden ausgeführt wird.
Beispiel mit Ontime:
https://www.herber.de/bbs/user/79010.xlsm
Beispiel mit DoEvents:
https://www.herber.de/bbs/user/79011.xlsm
Beide Beispiele funktionieren aber nur, wenn die Arbeitsmappen in der gleichen Excel-Instanz geöffnet sind.
Gruß
Franz
Anzeige
AW: Doevents oder wait? Besser OnTime !
21.02.2012 10:55:32
Steve
Besten Dank Franz und Dirk,
Ihr habt mir sehr geholfen.
Ietzt weis ich wenigstens den unterschied, und das mit dem ontime hätte ich nie herausgefunden. :-)
Grüsse Steve
AW: Doevents oder wait?
21.02.2012 10:47:05
Dirk
Hallo!
Wait wartet fuer die angegeben Zeit, d.h. es wird solange keine weitere Codezeile abgearbeitet bis diese Zeit verstrichen ist.
Doevents verwendest Du in einer Schleife While - wend oder Do - loop und erlaubt, das auch anderen Event 'Processzeit' zur verfuegung haben und etwas ausloesen koennen.
Fuer Dein Problem muesstest Du eine Schleife bauen und auf Dein Ausloesekriterium pruefen.
Z.B.
Festlegen, auf was geprueft werden soll
In einer Schleife
Do untill ausloessekriterium =true
doevents
loop
Damit sollte das dann gehen.
Gruss
Dirk aus Dubai
Anzeige
;
Anzeige

Infobox / Tutorial

Doevents oder Wait in Excel VBA?


Schritt-für-Schritt-Anleitung

Um mit DoEvents oder Wait in Excel VBA effektiv zu arbeiten, kannst du folgende Schritte befolgen:

  1. Entscheidung treffen: Überlege, ob du eine kurze Pause im Code benötigst oder ob du möchtest, dass die Benutzeroberfläche weiterhin interaktiv bleibt.

    • Wait blockiert den Code und lässt keine weiteren Eingaben zu.
    • DoEvents ermöglicht es Excel, andere Ereignisse zu verarbeiten und die Benutzeroberfläche bleibt aktiv.
  2. VBA-Editor öffnen: Drücke ALT + F11, um den VBA-Editor zu öffnen.

  3. Modul hinzufügen: Klicke mit der rechten Maustaste auf "VBAProject (DeineDatei.xlsx)" und wähle Einfügen > Modul.

  4. Code eingeben: Je nachdem, welche Methode du verwenden möchtest, schreibe den entsprechenden Code:

    • Beispiel mit DoEvents:

      Sub BeispielDoEvents()
       Dim i As Long
       For i = 1 To 100000
           ' Do something
           DoEvents ' Ermöglicht es Excel, Ereignisse zu verarbeiten
       Next i
      End Sub
    • Beispiel mit Wait:

      Sub BeispielWait()
       Application.Wait Now + TimeValue("00:00:01") ' 1 Sekunde warten
      End Sub
  5. Makro ausführen: Schließe den VBA-Editor und führe das Makro über ALT + F8 aus.


Häufige Fehler und Lösungen

  • Fehler: Anwendung reagiert nicht

    • Lösung: Wenn du Wait verwendest, kann Excel während dieser Zeit einfrieren. Überlege, ob DoEvents eine bessere Lösung für deine Anforderungen ist.
  • Fehler: Endlosschleife

    • Lösung: Bei der Verwendung von DoEvents in einer Schleife, stelle sicher, dass ein Abbruchkriterium vorhanden ist, um eine Endlosschleife zu vermeiden.

Alternative Methoden

Wenn du nach alternativen Methoden suchst, um Verzögerungen in VBA zu implementieren, kannst du Folgendes in Betracht ziehen:

  • Application.OnTime: Diese Methode ermöglicht es dir, ein Makro zu einer bestimmten Zeit oder nach einer bestimmten Verzögerung auszuführen, ohne Excel zu blockieren.

    Sub BeispielOnTime()
      Application.OnTime Now + TimeValue("00:00:01"), "MeinMakro"
    End Sub
  • Sleep-Funktion: Wenn du VBA Sleep verwenden möchtest, kannst du die API-Funktion Sleep aufrufen:

    Private Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
    
    Sub BeispielSleep()
      Sleep 1000 ' 1 Sekunde warten
    End Sub

Praktische Beispiele

Hier sind einige praktische Anwendungsfälle:

  • Benutzerinteraktion während einer langen Berechnung:

    Sub LangeBerechnung()
      Dim i As Long
      For i = 1 To 100000
          ' Berechnung
          DoEvents ' Benutzer kann weiterhin interagieren
      Next i
    End Sub
  • Warten, bis ein Ereignis eintritt:

    Sub WartenAufSchluss()
      Do
          ' Überprüfe, ob die Datei geschlossen wurde
          DoEvents
      Loop Until Not IsWorkbookOpen("DeineDatei.xlsx")
    End Sub
    
    Function IsWorkbookOpen(wbName As String) As Boolean
      On Error Resume Next
      IsWorkbookOpen = Not (Workbooks(wbName) Is Nothing)
      On Error GoTo 0
    End Function

Tipps für Profis

  • Vermeide unnötige Wartezeiten: Nutze DoEvents effizient, um sicherzustellen, dass Benutzer weiterhin mit deiner Anwendung interagieren können.
  • Kombiniere Methoden: In komplexen Anwendungen kann es sinnvoll sein, DoEvents und Application.Wait oder Sleep zu kombinieren, um die Leistung zu optimieren.
  • Vermeide Endlosschleifen: Achte darauf, dass deine Schleifen immer ein klares Abbruchkriterium haben.

FAQ: Häufige Fragen

1. Was ist der Hauptunterschied zwischen DoEvents und Wait?
DoEvents lässt Excel weiterhin auf Benutzeraktionen reagieren, während Wait den Code vollständig blockiert, bis die angegebene Zeit abgelaufen ist.

2. Wie kann ich sicherstellen, dass mein Code nicht in einer Endlosschleife stecken bleibt?
Verwende immer ein Abbruchkriterium in deinen Schleifen und achte darauf, regelmäßig DoEvents aufzurufen, um die Verarbeitung anderer Ereignisse zu ermöglichen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige