Minulla on kaksi painiketta Start_Button ja Stop_Button.
Start_button aloittaa For-funktion suorittamisen i-määrään.
Haluaisin rakentaa sellaisen koodin, että Stop_button -painikkeella voisi milloin tahansa keskeyttää kyseisen For-silmukan. Onko jollain neuvoja kuinka tämä voidaan toteuttaa VBA:ssa?
laita vaikka looppiin if ehto jollekkin boolean muuttujalle, ja jos se on tosi niin break.
doevents loopin sisälle, ja sitten stop napin eventissä pistät edellämainitun muuttujan todeksi. (start napin eventissä muuttuja takaisin epätodeksi)
Moi VBA_Alokas!
For...Next ei ole funktio vaan lause (statement), mutta kokeile oheista esimerkkiä
VBA/VB6:
'Proseduuri/For...Next esimerkki
Private ForNextExit As Boolean
Private Sub StartForNext_Click()
ForNextExit = False
Dim i As Integer
For i = 1 To 1000000 'esim.
DoEvents
If ForNextExit Then
Exit For 'poistuu silmukasta
'tai...
'Exit Sub 'poistuu aliohjelmasta
End If
'suorita jokin toiminto...
Next i
End Sub
Private Sub StopForNext_Click()
ForNextExit = True
End Sub'Funktio/Do...Loop esimerkki
Private DoLoopExit As Boolean
Private Sub StartDoLoop_Click()
DoLoopExit = False
MsgBox GetValue()
End Sub
Private Sub StopDoLoop_Click()
DoLoopExit = True
End Sub
Private Function GetValue()
Dim i As Integer
Do While i < 1000000 And Not DoLoopExit
DoEvents: i = i + 1
Loop
GetValue = i
End FunctionTuossa on ongelmana, että tuo DoEvent suoritus kestää. Tästä seuraa se, että kun haluaisin kirjoittaa arvot samanaikaisesti kaavioon, kestää kuvaajan kauan syntyä. Tarkoituksena on simuloida siniaaltoa ja tahtoisin kontrolloida siniaallon "nopeutta" vba:n avulla.
Onko tähän mitään hyvää keinoa?
VBA ei ole minulle tuttu ja sen ominaisuuksista en tiedä, mutta perinteinen tapa varmaankin olisi käyttää ajastinta ohjaamaan kuvaajan päivitysnopeutta ja piirtoa.
Tuon kuvaajan päivityksen voisi myös pistää omaan säikeeseensä ja käyttää condition variablea ja mutexia säikeen ohjaamiseen.
Aihe on jo aika vanha, joten et voi enää vastata siihen.