Index ausserhalb des gültigen Bereichs

Sub ComEvent()
Dim buf As Variant
Dim lg As Long
Select Case fhaupt.MSComm1.CommEvent
Case comEvReceive
lg = fhaupt.MSComm1.InBufferCount
buf = fhaupt.MSComm1.Input
Call protokoll(buf, lg)
Case comEvSend:

end sub

Sub protokoll(ar As Variant, lg As Long)
Dim Arr() As Byte
Dim c As Byte
Dim n As Long
Arr = ar
For n = 0 To lg - 1
c = Arr(n)

100%ig kann ich das auch nicht sagen, aber du liest durch buf = fhaupt.MSComm1.Input prinzipiell einen String ab (übergeben zwar als Variant, aber immer noch ein String). Vor allem die Umwandlung von einem String in ein Byte Array (Arr()) dürfte Probleme machen.
Ich weiß nicht, was du genau mit dem Code machst, versuchs mal mit

Sub protokoll(ar As Variant, lg As Long)
Dim Arr As string
Dim c As Byte
Dim n As Long
Arr = ar

For n = 1 To lg
c = Mid(Arr, n, 1)
state_machine ©
state_machine ©
If state = KOMPLETT Then
flag_auswertung = True
state = WAIT_SYNC
End If
Next n
End Sub

Das Beispiel behandelt die Zeichen als String.

mfg,
Harald

Danke für Deine schnelle Hilfe.
Leider hat es mit Deinem Vorschlag nicht geklappt.
Was ich damit mache: ich möchte einfach in sub Protokoll(…)
die Daten aus der seriellen Schnittstelle als Byte auswerten.
Hast Du eine weitere Idee (für VB6) ?
mfG
Yannick.

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hi!
Versuchs mal damit:

Sub ComEvent()
Dim buf As Variant
’ Dim lg As Long
Select Case fhaupt.MSComm1.CommEvent
Case comEvReceive
’ lg = fhaupt.MSComm1.InBufferCount
buf = fhaupt.MSComm1.Input
Call protokoll(buf)
Case comEvSend:

end sub

Sub protokoll(ar As Variant)
Dim c As Byte
Dim n As Long
Arr = ar
For n = 0 To ubound(ar)
c = ar(n)
state_machine ©
If state = KOMPLETT Then
flag_auswertung = True
state = WAIT_SYNC
End If
Next n
End Sub

Gruß.Timo Engel