Live-Forum - Die aktuellen Beiträge
Datum
Titel
16.10.2025 17:40:39
16.10.2025 17:25:38
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: zu Doevents

zu Doevents
05.05.2005 01:26:46
chris
Hallo VBA Profis, bin gerade dabei mich mal mit Doevents zu beschäftigen.
Habe dazu auch ein Beispiel aber irgendwie komm ich nicht klar mit der erklärung und dem beispiel das ich mir selbst erstellen wollte.
Hier erst einmal das was ich schon habe.Inklusive erklärung
Mit dem Doevents ist Excel nicht behindert während der Wartezeit von 5 sek kann mann weiter arbeiten !
Dim Pausenlänge, Start, Ende, Gesamtdauer
If (MsgBox("5 Sekunden Pause?", 4)) = vbYes Then
Pausenlänge = 5 ' Dauer festlegen.
Start = Timer ' Anfangszeit setzen.
Do While Timer DoEvents ' Steuerung an andere Prozesse
' abgeben.
Loop
Ende = Timer ' Ende festlegen.
Gesamtdauer = Ende - Start ' Gesamtdauer berechnen.
MsgBox "Die Pause dauerte " & Gesamtdauer & " Sekunden"
Else
End
End If
Die DoEvents-Funktion gibt einen Wert vom Typ Integer zurück, der die Anzahl der geöffneten Formulare in eigenständigen Versionen von Visual Basic (z.B. Visual Basic, Professional Edition) repräsentiert. In allen anderen Anwendungen gibt DoEvents Null zurück.
DoEvents übergibt die Ablaufsteuerung an das Betriebssystem. Das Programm erhält erst dann die Steuerung wieder zurück, wenn das Betriebssystem alle wartenden Ereignisse verarbeitet hat und alle wartenden Tastenanschläge in der SendKeys-Warteschlange abgearbeitet sind.
DoEvents ist für einfache Operationen besonders hilfreich, wenn z.B. einem Benutzer die Möglichkeit gegeben werden soll, einen Prozeß abzubrechen, nachdem er begonnen wurde, beispielweise die Suche nach einer Datei. Bei länger andauernden Vorgängen sollte die Steuerung besser mit Hilfe eines Zeitgebers an den Prozessor abgegeben werden, oder die Aufgabe sollte einer ActiveX-EXE-Komponente übertragen werden. Im zweiten Fall kann die Aufgabe vollkommen unabhängig von Ihrer Anwendung durchgeführt werden, und das Betriebssystem übernimmt das Multitasking und die Zuteilung der Prozessorzeit.
Vorsicht°°°Jedesmal wenn Sie die Steuerung zeitweise innerhalb einer Ereignisprozedur an den Prozessor abgeben, sollten Sie sicherstellen, daß die Prozedur nicht von einem anderen Teil des Codes aufgerufen wird, bevor der erste Aufruf beendet ist. Die Folgen eines solchen Aufrufs sind nicht vorhersehbar. Führen Sie DoEvents auch dann nicht aus, wenn Sie nicht ausschließen können, daß andere Anwendungen in irgendeiner Weise eine Verbindung mit der Prozedur herstellen, während das Betriebssystem die Ausführung steuert.
'------------------ Bis hier-----------------------
um das ganze jetzt zu verstehen wollte ich das nachbauen wie ich diesen befehl verstehe also wozu er benötigt wird. Hier mein versuch.
Sub start()
For x = 1 To 60000
Cells(x, 1) = "etst"
Cells(x, 2) = "etst"
Cells(x, 3) = "etst"
DoEvents
Next
End Sub

Private Sub CommandButton1_Click()
MsgBox ("OK")
Exit Sub
End Sub

'----------------------------------------------------------
Ich habe jetzt gedacht wenn ich die schleife ohne doevents laufen lasse das ich dann in excel nichts arbeite4n kann so lange die schleife läuft.Aber mit dem Doevents kann ich dann die schleife abbreche.
So habe ich jetzt als erstes das Makro Start gestartet und dann auf den Commandbutton auf meinem tabellenblatt geklickt und eigentlich erwartet das das Makro abgebrochen wird.
Wird es aber nicht.
Habe ich diesen befehl richtig verstanden oder wird er für andere Sachen genutzt. Bitte um Eure Hilfe ! Danke und schönen Feiertag grüße Christian
Anzeige

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

Betreff
Datum
Anwender
Anzeige
AW: zu Doevents
05.05.2005 08:40:10
Nepumuk
Hallo Christian,
ein kleines Beispiel: https://www.herber.de/bbs/user/22189.xls
Wenn du keine Anzeige hast die dynamisch ist, wie im Beispiel, dann würde ich DoEvents nur nach der Prüfung des Eingabestatus ausführen.


Option Explicit
Private Declare Function GetInputState Lib "user32" () As Long
Sub test()
    If GetInputState Then DoEvents
End Sub


Der Code macht natürlich keinen Sinn. Aber das Prinzip wird anschaulich. Oder?
Gruß
Nepumuk
Anzeige
AW: zu Doevents
05.05.2005 10:12:11
chris
Hallo Nepumuk, erts mal vielen Dank für deine schnelle Antwort.
--Der Code macht natürlich keinen Sinn. Aber das Prinzip wird anschaulich. Oder?
Ich verstehe denn sinn leider noch nicht ganz, muss aber dazu sagen weiß auch nicht genau was du mit
--Der Code macht natürlich keinen Sinn. Aber das Prinzip wird anschaulich. Oder?
genau meinst.
Ich weiß mein Level ist VBA gut aber etwas mehr als Macro Recorder weiß ich doch deshalb.
grüße Christian und schönen Feiertag
Anzeige
AW: zu Doevents
05.05.2005 10:52:38
Nepumuk
Hallo Christian,
vielleicht wird es so klarer:


Option Explicit
Private Declare Function GetInputState Lib "user32" () As Long
Private bolStop As Boolean
Public Sub prcStart()
    bolStop = False
    Do
        If GetInputState Then DoEvents
    Loop Until bolStop
End Sub
Public Sub prcStop()
    bolStop = True
End Sub


Die DoEvents - Funktion wird nur ausgeführt, wenn du eine Eingabe per Maus oder Tastatur machst. Zu viele DoEvents können Excel abstürzen lassen.
Gruß
Nepumuk
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige

Infobox / Tutorial

DoEvents in Excel VBA: Ein umfassender Leitfaden


Schritt-für-Schritt-Anleitung

  1. Grundlegendes Verständnis: DoEvents gibt die Kontrolle an das Betriebssystem zurück, damit es andere Prozesse verarbeiten kann, während ein VBA-Makro läuft. Dies ist besonders nützlich, wenn du sicherstellen möchtest, dass Excel während längeren Ausführungen weiterhin reagiert.

  2. Ein einfaches Beispiel: Hier ist ein Beispiel, wie Du DoEvents in ein Makro integrieren kannst:

    Sub PauseMitDoEvents()
        Dim Pausenlänge As Integer
        Dim Start As Double
        Dim Ende As Double
        Dim Gesamtdauer As Double
    
        If (MsgBox("5 Sekunden Pause?", vbYesNo) = vbYes) Then
            Pausenlänge = 5
            Start = Timer
    
            Do While Timer < Start + Pausenlänge
                DoEvents ' Steuerung an andere Prozesse abgeben
            Loop
    
            Ende = Timer
            Gesamtdauer = Ende - Start
            MsgBox "Die Pause dauerte " & Gesamtdauer & " Sekunden"
        Else
            End
        End If
    End Sub
  3. Ausführen des Codes: Füge den Code in ein neues Modul in Excel VBA ein und führe das Makro PauseMitDoEvents aus. Du solltest in der Lage sein, während der Pause mit Excel zu interagieren.


Häufige Fehler und Lösungen

  • Makro reagiert nicht: Wenn Dein Makro nicht reagiert, prüfe, ob Du DoEvents an der richtigen Stelle eingefügt hast. Es sollte in einer Schleife platziert werden, um die Kontrolle zurückzugeben.

  • Excel stürzt ab: Zu viele Aufrufe von DoEvents können Excel instabil machen. Stelle sicher, dass Du es nur bei Bedarf verwendest.


Alternative Methoden

  • Timer anstelle von DoEvents: Eine vba doevents alternative könnte die Verwendung eines Timers sein, um die Ausführung zu steuern. Hier ist ein einfaches Beispiel:

    Sub TimerBeispiel()
        Dim Start As Double
        Start = Timer
    
        Application.OnTime Now + TimeValue("00:00:05"), "MakroNachPause"
    End Sub
    
    Sub MakroNachPause()
        MsgBox "5 Sekunden sind vergangen!"
    End Sub
  • ActiveX-EXE-Komponente: Für komplexere Anwendungen kann die Verwendung einer ActiveX-EXE-Komponente sinnvoll sein, um die Aufgabe unabhängig auszuführen.


Praktische Beispiele

  • Eingabeüberprüfung mit DoEvents: Ein Beispiel für die Verwendung von GetInputState in Verbindung mit DoEvents:

    Private Declare Function GetInputState Lib "user32" () As Long
    
    Public Sub EingabeÜberprüfung()
        Do
            If GetInputState() Then
                DoEvents
            End If
        Loop
    End Sub
  • Anwendungsfall: Wenn Du eine lange Schleife hast, in der Benutzerinteraktionen möglich sein sollen, ist DoEvents unverzichtbar. Beispiel:

    Sub LangeSchleife()
        Dim i As Long
        For i = 1 To 100000
            Cells(i, 1).Value = "Test"
            DoEvents ' Ermöglicht Benutzereingaben während der Schleife
        Next i
    End Sub

Tipps für Profis

  • Verwende DoEvents sparsam: Zu viele Aufrufe können die Leistung beeinträchtigen. Nutze es nur bei langen Prozessen.

  • Schutz vor Abstürzen: Überprüfe vor jedem DoEvents, ob der Prozess noch aktiv ist, um unerwartete Abstürze zu vermeiden.

  • Verstehe den Kontext: DoEvents ist ideal für Benutzeroberflächen, aber für reine Berechnungen ist es oft nicht nötig.


FAQ: Häufige Fragen

1. Was ist der Unterschied zwischen DoEvents und einem Timer?
DoEvents gibt die Kontrolle sofort an andere Prozesse zurück, während ein Timer eine verzögerte Ausführung ermöglicht.

2. Kann ich DoEvents in einer Schleife verwenden?
Ja, es ist üblich, DoEvents in langen Schleifen zu verwenden, um die Benutzeroberfläche reaktionsfähig zu halten.

3. Ist DoEvents in Excel VBA immer sicher?
Nicht immer. Übermäßige Verwendung kann zu Performance-Problemen führen. Verwende es mit Bedacht.

4. Wie kann ich DoEvents in Word VBA verwenden?
Die Verwendung von DoEvents in Word VBA erfolgt auf die gleiche Weise wie in Excel. Der Code bleibt weitgehend identisch.

5. Gibt es eine bessere Alternative zu DoEvents?
In einigen Szenarien kann die Verwendung von Asynchronous Programming oder Multi-Threading in .NET eine bessere Lösung sein, wenn Du mit VB.NET arbeitest.

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