Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1324to1328
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
while Schleife abbrechen geht nicht
25.07.2013 17:11:10
Dirk
Hallo zusammen,
ich versuche eine While-Schleife mit ESC abzubrechen, aber irgendwie klappt das nicht so, wie ich mir das vorstelle. Ich habe in diversen Foren unterschiedliche Lösungen gefunden und mehrere ausprobiert. Ohne Inhalt klappt es, aber mit Inhalt funktioniert es leider nicht.
Hier mal der Code:
Option Explicit
Private b As Boolean
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
If KeyCode = 27 Then b = False
End Sub
Private Sub start_program()
On Error GoTo ErrorHandler
Dim idn As String
Dim i As Integer
Dim ic As Integer
Dim c As Integer
Dim Z As Integer
Dim tst As String
Dim volt As Double
Dim curr As Double
Dim INP As Double
Dim Vstepa As Double
Dim Tstepa As Double
Dim NoVal As Double
Dim slist As String
Dim voca As Double
Dim numdat As String
Dim Sh1 As Worksheet
Set Sh1 = ActiveSheet
INP = 1
voca = tbLoadBank11.Value     ' Startwert Spannung
Vstepa = tbLoadBank13.Value   ' Step der Spannung
Tstepa = tbLoadBank14.Value   ' Zeit pro Step
NoVal = tbLoadBank15.Value    ' Messpunkte pro Step
b = True
i = 0
Z = 0
Sh1.Cells(1, 1) = "Timestamp"
For ic = 11 To 18
If UserForm1.Controls("ch" & ic).Value  "   " Then
Sh1.Cells(1, ic - 9) = UserForm1.Controls("name" & ic).Value + "  [" + UserForm1. _
Controls("label" & ic) + "]"
Else
Sh1.Cells(1, ic - 9) = ""
End If
Next
Do While (voca > 0 Or b = True)
DoEvents
i = i + 1
Z = Z + 1
Sh1.Cells(i + 1, 1) = Now()
Application.Wait (Now() + TimeValue(Format(Tstepa / 86400, "hh:mm:ss")))
For c = 1 To numdat
UserForm1.Controls("display" & c + 10).Value = Sh1.Cells(i + 1, c + 1)
Next
If Z = NoVal Then
voca = voca - Vstepa
Z = 0
End If
Loop
MsgBox "Stop loop!"
Exit Sub
ErrorHandler:
MsgBox ("Something went wrong! Start failed!")
End Sub

Ich habe die Maschinendaten gelöscht, die im Code waren, da es ein Datenlesegerät anspricht.
Des Weiteren habe ich, wie hier im Forum beschrieben, aus der While-Schleife eine Do While-Schleife gemacht.
Es liegt irgendwie an der Application.Wait.
Wenn ich ESC drücke, liesst die Maschine sofort den Wert aus, es scheint so als wird Application.Wait beendet. Nur fängt das Ganze direkt wieder von vorne an, da die Do While -Schleife nicht beendet wird.
Nachdem voca > 0 erreicht wird, wird die Schleife beendet.
Hat jemand eine Idee?
Ich bin über jede Hilfe sehr dankbar !!!
Viele Grüße und DANKE
Dirk

20
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: while Schleife abbrechen geht nicht
25.07.2013 17:50:01
Oberschlumpf
Hi Dirk
Schreib nicht

Private b As Boolean
sondern
Public b As Boolean
Hilfts?
Ciao
Thorsten

Das dürfte eigentl nur helfen, wenn die ...
25.07.2013 19:08:21
Luc:-?
…beiden SubProzz in verschiedenen Modulen stehen, Thorsten (& Dirk);
außerdem sollte die Variable unbedingt in einem allgemeinen Modul deklariert wdn, was dann bei projektweiter Gültigkeit auch Public bedingen würde.
ist die Form ein Start-Button, Dirk? Prüf doch mal, ob b bei KeyDown tatsächlich False wird!
Ich mache so etwas mit FormObjekten, die beim Klicken ihre Darstellung von erhaben auf vertieft (und zurück) wechseln. Das kann man gut abfragen.
Gruß Luc :-?

Anzeige
ja, stimmt...
25.07.2013 19:18:11
Oberschlumpf
Hallo alle
Public b As Boolean
MUSS in einem allgemeinen Modul stehen!
Sorry, darauf hatte ich gar nicht geachtet.
Ciao
Thorsten

AW: ja, stimmt...
25.07.2013 20:20:04
Dirk
Danke.
Habe ich ohne Erfolg auch probiert. Leider erst gesehen, als ich die Dateien schon hochgeladen hatte.
Danke für die Info :-)

AW: Das dürfte eigentl nur helfen, wenn die ...
25.07.2013 20:15:06
Dirk
hallo,
erst einmal vielen Dank für Eure Antworten.
Es klappt leider nicht. So wie ich das beurteilen kann, unterbreche ich mit ESC nur die Application.wait aber beende nicht die Schleife.
Hier sind zwei Dateien. Bei der Einen klappt es und die Andere stellt genau mein Problem da. Gleiches Verhalten und keine Reaktion von irgendetwas. b wird bei KeyDown irgendwie nicht FALSE.
Es wäre wirklich großartig, wenn jemand eine Lösung wüsste.
https://www.herber.de/bbs/user/86561.xlsm
https://www.herber.de/bbs/user/86562.xlsm
Ich verstehe es leider nicht, wo das Problem liegt.
Vielen DANK im Voraus.
Dirk

Anzeige
AW: Das dürfte eigentl nur helfen, wenn die ...
25.07.2013 21:24:37
Dirk
Ich habe noch einen Fehler gefunden, warum die Schleife gar nicht endet:
Do While (voca > 0 And b = True)
müsste es heißen !
Wie gesagt, ESC beschleunigt die Schleife (den Zähler) nur, beendet aber nicht die Schleife.
Danke im Voraus!

Keiner ein Idee?
27.07.2013 02:35:26
Dirk
Hm, hat keine eine Idee? Ich hatte schon überlegt, die KeyDown if Funktion in die Schleife zu kopieren. Muss ich mal testen.
DANKE an alle !!

AW: Keiner ein Idee?
27.07.2013 04:37:09
Oberschlumpf
Hi Dirk
Was ich herausgefunden hab, funktioniert zumindest ein bisschen :-)
Private Sub CommandButton1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As  _
Integer)
If KeyCode = 27 Then b = False
End Sub
UND
Public b As Boolean
MUSS in einem allgemeinen Modul stehen - das ist wichtig!
Warum
If KeyCode = ...usw
im KeyDown-Ereignis des Buttons und nicht des Userforms?
Der Grund ist, dass das Userform den Fokus haben muss, wenn KeyDown funktionieren soll.
Userform hat aber nicht den Fokus, weil du ja auf den Button klickst.
Der Haken:
Irgdwo in deiner Do/Loop-Schleife oder sonstwo im Code scheint noch ein logischer Fehler zu sein.
Denn du musst mehrmals auf ESC drücken, damit b = False wird.
Und auch nur mit Glück erscheint die Meldung "Stop loop!" oder sie erscheint eben nich.
Weiter viel Erfolg.
Ciao
Thorsten

Anzeige
AW: Keiner ein Idee?
27.07.2013 14:49:20
Dirk
Hallo Oberschlumpf,
VIELEN DANK. Wie Du schon sagtest, ist in der Schleife irgendwie der Wurm drinnen :-(
Falls noch jemand eine Idee hat bin ich sehr dankbar.
Viele Grüße
Dirk

AW: Keiner ein Idee?
27.07.2013 16:55:57
Oberschlumpf
Hi Dirk
ok, ich war faul + hatte vorhin keine Lust, nach dem "Logikfehler" zu suchen.
Ändere die Do-Zeile um in
Do While voca > 0 And b = True
"Deine" Zeile Do While (voca > 0 Or b = True) "sagt" dem Code:
Mach immer weiter, so lange voca größer 0 ODER b = wahr.
Bedeutet:
AUCH, wenn b = Falsch, macht der Code weiter - weil - voca is ja bis 0 noch immer größer als 0
Meine Do-Bedingung Do While voca > 0 And b = True sagt aber:
Mach NUR weiter, wenn voca größer 0 UND b = Wahr.
Bedeutet:
Hör auf, wenn eins von beiden nicht stimmt.
Hilfts?
Ciao
Thorsten

Anzeige
AW: keiner eine Idee
27.07.2013 21:47:16
Dirk
Vielen DANK Oberschlumpf,
zu Hause klappt es soweit. Ich werde es am Mo mit dem Logger probieren und mich wieder melden.
Bis dahin lasse ich das mal als offen.
VIELEN DANK !!!
Viele Grüße
Dirk

AW: keiner eine Idee
29.07.2013 12:47:32
Hajo_Zi
Hallo Dirk,
Du willst ja testen, darum sehe ich es nicht mehr als offen an.

AW: keiner eine Idee
29.07.2013 12:47:32
Hajo_Zi
Hallo Dirk,
Du willst ja testen, darum sehe ich es nicht mehr als offen an.

Anzeige
AW: keiner eine Idee
29.07.2013 12:51:05
Oberschlumpf
Hi HaJo
deswegen musst du es aber nicht 2x kundtun.
Obwohl du hier ja n alter Hase bist, ist es mir bei deinen Antworten schon öfter aufgefallen, dass du selbige, warum auch immer, mehrmals postest.
Ciao
Thorsten

AW: keiner eine Idee
29.07.2013 12:53:20
Hajo_Zi
Hallo Torsten,
da bin ich aber nicht alleine, das kommt öfters vor.
Gruß Hajo

AW: keiner eine Idee
29.07.2013 15:42:30
Dirk
Hallo Oberschlumpf,
vielen Dank noch einmal fuer Deine Hilfe.
Zu Hause hatte ich es noch mehrmals probiert und bin trotz Deiner Idee wieder auf das gleiche Problem gestossen. Allerdings lief da auch mein Office nicht so doll.
Auf der Arbeit habe ich leider immer noch das Problem, selbst wenn ich die () weg mache.
Die Schleife laeuft einfach weiter.
Ich verstehe es leider nicht. Dein Ansatz klang so vielversprechend.
Noch jemand eine Idee?
Viele Gruesse und vielen Dank im Voraus.
Dirk
@ Hajo_Zi:
Ich habe leider nur Office fuer Mac zu Hause und da klappt VBA nicht wirklich gut. Es tut mir LEID, dass ich Dich mit "dem Testen auf der Arbeit" dazu gebracht habe, mein Thema als geschlossen zu betrachten. Haette ich es so gesehen, haette ich den Haken nicht gesetzt. Allerdings haette ich mich ueber Deine Hilfe auch gefreut.

Anzeige
AW: keiner eine Idee
29.07.2013 15:54:44
Oberschlumpf
Hi Dirk
Hier die Datei, MIT DER ES funktioniert.
Teste selbst.
https://www.herber.de/bbs/user/86618.xlsm
da es ja grundsätzlich funktioniert, läuft in deinem restlichen Code irgdwo was falsch.
Ciao
Thorsten

gelöst !!!
29.07.2013 18:03:44
Dirk
Hallo Thorsten,
VIELEN VIELEN DANK. Der Fehler lag bei
Private Sub CommandButton1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As  _
Integer)
If KeyCode = 27 Then b = False
End Sub
Ich hatte dort in meiner Version Form_KeyDown() stehen und auch nicht den exakten Inhalt der Klammern. Nachdem ich das Form durch die Bezeichnung des Buttons ersetzt hatte, funktionierte es.
Noch einmal vielen vielen Dank !!!
Darauf wäre ich im Leben nicht gekommen.
Wieder habe ich etwas dazu gelernt.
Viele Grüße
Dirk

Anzeige
hmmm........
29.07.2013 18:10:07
Oberschlumpf
Hi Dirk
Aber GENAU DAS hatte ich dir schon hier geschrieben:
https://www.herber.de/forum/messages/1324444.html
Du solltest nicht nur Fragen stellen, sondern die erhaltenen Antworten auch mal ausprobieren.
Ciao
Thorsten

291 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige