Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: VBA: For funktion pysäyttäminen painikkeella

VBA_Alokas [12.09.2011 14:49:38]

#

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?

groovyb [12.09.2011 16:21:02]

#

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)

neau33 [12.09.2011 21:25:21]

#

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

VBA_Alokas [19.09.2011 11:25:50]

#

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?

jalski [19.09.2011 11:38:13]

#

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.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta