wer kann helfen ???
Ich suche nach einer Möglichkeit, eine laufende Schleife (Loop - Until ), mit einem Click auf eine Schaltfläche eines Tabellenblatts zu beenden.
mfg
wer kann helfen ???
Ich suche nach einer Möglichkeit, eine laufende Schleife (Loop - Until ), mit einem Click auf eine Schaltfläche eines Tabellenblatts zu beenden.
mfg
Dim Halt As Boolean
Code eingefügt mit Syntaxhighlighter 1.14
Public Sub Schleife()
Do
' mach irgendwas
DoEvents
If Halt Then Exit Do
Loop
End Sub
Public Sub anhalten()
Halt = True
End Sub
Gruß
Nepumuk
ich will ja nicht unhöflich sein, aber was soll das?
Wann wird Anhalten aufgerufen?
Gruß
Micha
das funktioniert... - aber nicht besonders zuverläsig. Das ist meine Erfahrung aus ähnlichen Versuchen zum selben Problem vor gar nicht allzu langer Zeit. Zumindest würde ich eine kleine Pause am Ende eines jeden Pausendurchlaufes programmieren. Grds werden Tastatureingaben wohl zuverlässiger verarbeitert als Mausklicks. Warum weiß ich auch nicht. Ich hab letztlich bei meinen schleifen ein Hinweisfenster gesetzt: STRG + Pause = Abbruch. Das ist nicht so schick wie eine Schaltfläche - funktioniert aber sehr zuverlässig. Mit entsprechendem Errorhandler kann man das auch gut auffangen.
Gruß
Björn
das hatte ich versucht...aber es hat nichts gebracht. Übrigens sind die DoEvents auch gar nicht so ungefährlich. An bestimmten Stellen scheinen sie Lufzeitfehler auszulösen oder sogar Abstürze von xl. Ich denke, die stabilere Sache ist schon der Tastenmakro - wenn auch längst nicht so elegant.
Viele Grüße
Björn
erst mal Danke für die Antworten!
Das Beispiel von Nepumuk funktioniert tatsächlich!!!
Da Du (Björn) aber meinst, es sei nicht zuverlässig, wie sollte ich denn über einen Tastendruck die Schleife beenden ??? ohne gleich das laufende Programm zu unterbrechen sondern ein geregelten PRG-Abschluss hinzubekommen.
Wie soll das mit dem Errorhandler Funktionieren ???
Tschau
wenn Nepumuks Ansatz in Deinem Projekt tadellos klappt, spricht sicher nix gegen den Einsatz. In meinem Proggi hatte der Ansatz leider nicht richtig zuverlässig geklappt. es hing davon ab, wann man auf die Schaltfläche klickte. wenn man den falschen Zeitpunkt erwischte, wurde der Klick einfach vollständig ignoriert. Die Tastenfunktion ist STRG + Pause. Weil das eine shr unschöne Fehlmeldung erzeugt errorhandler einbauen. in etwa so:
Sub soundso()
On Error GoTo EH
Application.EnableCancelKey = xlErrorHandler
(...)
EH:
Exit Sub
If Err.Number <> 0 Then
If Err.Number = 18 Then
Application.EnableCancelKey = xlDisabled
MsgBox "Druckauftrag wurde vom Benutzer abgebrochen!", vbCritical, "Achtung!"
DoEvents
Else
Application.EnableCancelKey = xlDisabled
MsgBox "Laufzeitfehler " & Err.Number & " aufgetreten.", vbCritical, "Laufzeitfehler"
Rahmen1.Caption = Format(0, "0%")
ProgressBar.Value = 0
End If
End if
End sub
Gruß Björn
wenn Nepumuks Ansatz in Deinem Projekt tadellos klappt, spricht sicher nix gegen den Einsatz. In meinem Proggi hatte der Ansatz leider nicht richtig zuverlässig geklappt. es hing davon ab, wann man auf die Schaltfläche klickte. wenn man den falschen Zeitpunkt erwischte, wurde der Klick einfach vollständig ignoriert. Die Tastenfunktion ist STRG + Pause. Weil das eine shr unschöne Fehlmeldung erzeugt errorhandler einbauen. in etwa so:
Sub soundso()
On Error GoTo EH
Application.EnableCancelKey = xlErrorHandler
(...)
EH:
Exit Sub
If Err.Number <> 0 Then
If Err.Number = 18 Then
Application.EnableCancelKey = xlDisabled
MsgBox "Druckauftrag wurde vom Benutzer abgebrochen!", vbCritical, "Achtung!"
DoEvents
Else
Application.EnableCancelKey = xlDisabled
MsgBox "Laufzeitfehler " & Err.Number & " aufgetreten.", vbCritical, "Laufzeitfehler"
Rahmen1.Caption = Format(0, "0%")
ProgressBar.Value = 0
End If
End if
End sub
Gruß Björn