Originariamente inviato da GraficInside
non va .... il codice è questo
...
MSComm1.Output = stringaOutput 'invio la richiesta
Delay (1000) 'attendo
ricevi = MSComm1.Input 'prelevo la risposta dalla periferica
If ricevi = "" Then validato = False: GoTo Esci 'se la periferica non risponde esco ed imposto un flag
....
quando eseguo questo codice con la sleep al posto della delay va nello stato non risponde ma la comunicazione avviene correttamente, se metto la delay invece è come se non venisse generato alcun ritardo anche se alzo il numero di millisecondi... la delay l'ho definita esattamente come suggerito da oregon:

Public Sub Delay(ByVal ms As Long)
While ms > 0
Sleep 50
DoEvents
ms = ms - 50
Wend
End Sub

PS ho anche provato ad usare la call per richiamare la delay il risultato non cambia
Il codice della Delay e' corretto ed esegue il ritardo. Puoi controllarlo con

Print Timer
Delay (1000)
Print Timer

Il problema del diverso comportamento sta da qualche altra parte, del resto non abbiamo visto tutto il codice del programma.

In particolare, non so se nel tuo programma esiste del codice nell'evento

OnComm

del controllo. Questo perche', eseguendo la DoEvents, viene sicuramente eseguito questo evento che potrebbe ricevere i dati eliminandoli dal buffer.

In realta', il software di comunicazione seriale NON si scrive cosi' come hai fatto tu (e cioe' Invio, Ritardo, Ricezione) ma in modo asincrono. Ovvero, Invio e Gestione della Ricezione dei dati nella OnComm.