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 Function
Tuossa 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.