Toon posts:

Loop onderbreken in VBA Excel

Pagina: 1
Acties:
  • 2.284 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Ik heb een macro geschreven in VBA Exel.
De macro wordt gestart d.m.v. een button, en gestopt d.m.v. een tweede button.
In de macro zit een loop waarin er 'geluisterd' wordt naar de COM-poort.
Alles werkt perfect zolang ik niet op de stop-knop druk. De macro achter de stop-knop wordt blijkbaar pas geactiveerd als de macro uit zijn loop komt. ( d.w.z. dat wanneer ik op de stop-knop druk, er éérst nog één waarde moet doorgestuurd worden via de COM-poort, en deze nog verwerkt wordt, alvorens de macro stopt )

Bestaat er een mogelijkheid om de loop te onderbreken, onmiddelijk op het ogenblik dat ik op de stopknop druk? Ik heb geprobeerd met de stopknop.value te checken ( zie onder ), maar dit lukt niet.

Alvast Dank

Private Sub startknop_Click() ' mijn startknop
stopped = False
Do While Not stopped
Call uitlezen
Loop
End Sub

Private Sub Stopknop_Click() ' mijn stopknop
stopped = True
End Sub

Sub uitlezen()
Dim zoek As String
MSComm1.InBufferCount = 0
MSComm1.CommPort = 1
zoek = Chr(32) ' 32 = spatie
MSComm1.PortOpen = True
'We stellen een loop in tot de binnenkomende data een bepaald teken bedraagt ( in ons geval is dit de waarde die staat in de variabele "zoek"
Do While
MSComm1.Input <> zoek And Stopknop.Value = True
Loop

MSComm1.InputLen = 6
Label1.Caption = MSComm1.Input
ActiveCell.Value = CSng(Label1.Caption)
End Sub

  • Cassettebandje
  • Registratie: Juli 2002
  • Laatst online: 09-03 20:23

Cassettebandje

SA-C90 TDK

code:
1
2
3
4
Do While
MSComm1.Input <> zoek And Stopknop.Value = True
DoEvents()
Loop

should do the trick. Hint: code leest makkelijker in code-tags.

  • pistole
  • Registratie: Juli 2000
  • Laatst online: 07:59

pistole

Frutter

ik vermoed dat het komt door MSComm1.Input inderdaad wacht tot er iets binnenkomt?

Visual Basic:
1
2
3
4
5
6
7
8
9
10
Do While Stopknop.Value = false 

    tmp=MSCom1.Input
    'doe dingen
    DoEvents()
    'doe meer dingen

    if tmp=zoek then exit loop 'ofzo

Loop


Bovenstaande is leuk en misschien duidelijker, maar gaat ook niet werken als MSCom1.Input echt 'wacht'.
Misschien moet je eens zoeken naar asynchrone afhandeling i.c.m. events?

Ik frut, dus ik epibreer


Verwijderd

Topicstarter
Hallo !
met de DoEvents oplossing werkt de stopknop zoals gewild.

Ik heb echter het programma moeten herwerken omdat zich een eigenaardigheid voordeed :
Door de DoEvents ertussen te voegen gebeurde het dat onjuiste ( gedeeltelijke ) gegevens werden doorgegeven.
Ik heb het probleem opgelost met de instructie OnComm :


Select Case MSComm1.CommEvent
Case comEvReceive
strbuffer = MSComm1.Input
If Len(strbuffer) > 3 Then
teken = Mid(strbuffer, 1, Len(strbuffer) - 1)
If IsNumeric(teken) Then
ActiveCell.Value = teken
End If
End If
End Select
End Sub

Aan iedereen hartelijk dank voor de snelle hulp !!

[ Voor 3% gewijzigd door Verwijderd op 25-01-2008 11:32 ]


Verwijderd

Topicstarter
Hartelijk dank voord de snelle hulp.