Do Events hängt While Schleife auf

Bennyaa

Lieutenant
Registriert
März 2007
Beiträge
828
Hallo ich habe folgende While - Schleife

Code:
While PortOpen
....
....
....
        If ...

        Else
            Call ClosePort
            Exit Sub
        End If
        DoEvents   
    Wend

Wenn man nun, während der Schleife einen Doppelklick in eine Zelle macht, so bleibt die Schleife hängen, auch wenn man die Zelle wieder verlässt.

Wie kann man das abstellen?
 
Zuletzt bearbeitet:
Nitschi66 schrieb:
Also dein geposteter Code ist glaube ich schonmal fehlerhaft, da das "WEND" in deine Kommentar-zeile integriert wird.

Nein wird es nicht, zeigt hier nur der Code Tag so an... der code funktionert auch einwandfrei, biss auf dann wenn man zeilen anklickt... liegt denke ich an dem do Events, aber wie bekommt man das weg? also brauche ja die Events, da ich einen stopbutton habe
 
Mein VBA von O10 kann mit PortOpen als einem Befehl nichts anfangen. Der Logik nach nach scheint also zu Beginn der Schleife eine Variable (Function?!) PortOpen irgendwie auf True gesetzt worden zu sein damit eine Function ClosePort ihn wohl (irgendwie) auf False setzt.

Wie auch immer - als ich die Hilfe zu DoEvents aufrief haben mir die Ohren geschlackert… Wozu (ge)braucht du das? F1 folgend und deinem Codefragement wird dort irgendwann eine äußere Reaktion abgewartet, so lange dreht de Schleife keine Ehrenrunden sondern Däumchen.

So weit ich das also zu sehen im Stande bin tut deine Schleife, tut DoEvents, genau was es soll. So lange das IF nicht False wird geht es munter rund. Ausgebremst durch DoEvents.

CN8
 
cumulonimbus8 schrieb:
Mein VBA von O10 kann mit PortOpen als einem Befehl nichts anfangen. Der Logik nach nach scheint also zu Beginn der Schleife eine Variable (Function?!) PortOpen irgendwie auf True gesetzt worden zu sein damit eine Function ClosePort ihn wohl (irgendwie) auf False setzt.

Wie auch immer - als ich die Hilfe zu DoEvents aufrief haben mir die Ohren geschlackert… Wozu (ge)braucht du das? F1 folgend und deinem Codefragement wird dort irgendwann eine äußere Reaktion abgewartet, so lange dreht de Schleife keine Ehrenrunden sondern Däumchen.

So weit ich das also zu sehen im Stande bin tut deine Schleife, tut DoEvents, genau was es soll. So lange das IF nicht False wird geht es munter rund. Ausgebremst durch DoEvents.

CN8

Nein !!!! DoEvents dient dazu, dass man während einer Schleife ein Event (bspw. nen bitten drücken) ausführen kann. Fehlt dieser Befehl, dann kann man während der Schleife auch nicht mal Stopp drücken.
 
Doppelklicken in eine Zelle legt Excel komplett lahm. Das kann ich mir gut vorstellen das die Schleife in diesem Augenblick nicht weiter läuft.

Was passiert denn wenn Du die Zelle wieder verlässt? Wie äußert sich der aufgehängt Status?

Edit: Habs gerade mal mit einem von meinen Codes probiert und er lief durch. Könnte aber auch daran liegen das es ein Add-In mit ner separaten Klasse ist und nicht direkt am Sheet hängt in welchem die Zelle ausgewählt wird. Vielleicht ist auslagern eine Option.
 
Zuletzt bearbeitet:
@Bennyaa
Ich habe normale Schleifen immer mit Stopp oder Strg+C anhalten können.
Wiederum käme ich auch nicht auf die Idee ein Makro zu starten um dann irgendwo Buttons zu drücken. Bin vermutlich von gestern.

Doppelklicks in Zellen kenne ich zudem nur als Aktionsmakros oder normales Bearbeiten - auch das klappt bei mir, und ohne mittendrin Buttons zu drücken…

Welcher Schuh drückt da also genau?

CN8
 
Ich glaube ich habe mich unverständlich ausgedrückt.
Also... Ich starte über einen Button eine RS232 Kommunikation, welche läuft bis ich den Button erneut anklicke. Dadurch wird "PortOpen" auf false gesetzt.

Wenn ich bei laufender Kommunikation in irgend einem Sheet eine Zelle doppelt anklicke, dann schließt der Port nicht, auch die Variable "PortOpen" ist noch true, aber die while schleife bricht ab. Wenn man die Zelle wieder verlässt passiert auch nichts weiter.
Die Gunktion ist schon in ein Modul ausgelagert und hängt nicht am Sheet.
 
Mir fällt gerade auf, dass ich keine while schleife in meinem code habe, sondern eine do loop. Vielleicht liegts daran. Ich rate aber nur, habe gerade keine Zeit zu testen. Kann mir nur vorstellen, dass Excel einfach die Schleife zurück setzt, ohne dass deine Variable auf false gesetzt wird.

"Worin" hast du dein Makro gespeichert wenn es nicht am Sheet hängt? In einem anderen Sheet, oder ein Add-In? Welches office benutzt du?
 
Habe ein Modul, in welchem das Makro liegt.
Der "Fehler" Tritt bei Office 2003 und 2010 auf

Also ich habe jetzt direkt vor dem DoEvents eine Zelle beschrieben (Fest eine 1). und direkt danach wieder einen anderen Wert in die Zelle geschrieben

Wenn ich in irgendeine Zelle klicke und die Schleife abbricht, dann steht dort immer die Feste 1 drin.

Gibt es eine alternative zu DoEvents?
 
Zuletzt bearbeitet:
Zurück
Oben