(Zeit)schleife mit CommandButton unterbrechen

17/05/2009 - 18:28 von GeWu | Report spam
Liebe User,
ich benötige bitte einmal Hilfe zu folgendem Problem:
Ich habe eine Userform mit einem CoomandButton und einem Textfeld.

Sub countertest()
For n = 1 To 7
UserForms(0).TextBox1.Text = n
Application.Wait (Now + TimeValue("0:00:01"))
Next n
End Sub

Mit dem CoomandButton kann ich das Sub aufrufen und die Variable n in der
Textbox problemlos darstellen.
Nun möchte ich mit einem Click auf demselben CommandButton (oder einem
zweiten oder einem ToggleButton) die Schleife anhalten und mit einem weiteren
Click fortsetzen (nicht neu starten!); auch nicht mit einer Taste.
Wie würde der Code für den Button aussehen bzw. wo muss er stehen? Welche
Eigenschaften müssen voreingestellt werden?
Vielen Dank für jeden Hinweis im voraus
Grüsse aus Lübeck
Gerhard
 

Lesen sie die antworten

#1 Reiner Wolff
18/05/2009 - 15:33 | Warnen spam
Moin Gerhard,

*GeWu* schrieb:
Ich habe eine Userform mit einem CoomandButton und einem Textfeld.

Sub countertest()
For n = 1 To 7
UserForms(0).TextBox1.Text = n
Application.Wait (Now + TimeValue("0:00:01"))
Next n
End Sub

Mit dem CoomandButton kann ich das Sub aufrufen und die Variable n in der
Textbox problemlos darstellen.
Nun möchte ich mit einem Click auf demselben CommandButton (oder einem
zweiten oder einem ToggleButton) die Schleife anhalten und mit einem weiteren
Click fortsetzen (nicht neu starten!); auch nicht mit einer Taste.
Wie würde der Code für den Button aussehen bzw. wo muss er stehen? Welche
Eigenschaften müssen voreingestellt werden?




Das könnte zB so aussehen:





















































private boolBreak as Boolean

Sub countertest
static n as long

do until n >= 6 or boolBreak = True
if not boolBreak then
NameUserForm.TextBox1.Text = n+1
Pause 1
n = n + 1
endif
loop
If n >= 6 then
n = 0
End if
End Sub

Sub CounterBreak()
boolBreak = not boolBreak
End Sub

Private Sub Pause(ByVal Seconds As Double)
Dim t As Double
t = TimeStamp(Seconds)
Do Until TimeStamp >= t
DoEvents
Loop
End Sub

Private Function TimeStamp(Optional ByVal Seconds As Double) As Double
TimeStamp = Int(Now) + (Timer + Seconds) / 86400
End Function
<<<<<<<<<<<<<<<<<<<<<<<<

Wait làsst Excel "einfrieren", daher habe ich eine Variante über DoEvents
gewàhlt, damit auf den anderen Button überhaupt von Excel reagiert wird.

HTH
Gruß aus Kiel
Reiner
Ein Spezialist ist jemand, der von immer weniger immer
mehr weiß, bis er von nichts alles weiß.

Ähnliche fragen