Итак, это уже загадка для экспертов. Описываю ситуацию.
Пример 
- Код: Выделить всё
- Private Sub MSComm1_OnComm()       'Срабатывание события COM порта
 Dim Inp() As Byte
 If MSComm1.CommEvent <> comEvReceive Then Exit Sub
 Inp = MSComm1.Input
 Terminal_Text = Terminal_Text & Hex(Inp(0))
 I = I + 1
 End Sub
 
работает исправно если вместо переменой объявить массив типа Byte и присвоить ему принятый байт (в настройках порта стоит RThreshold = 1, т.е. прерывание по приему каждого байта).
Если вы объявите Inp как переменную типа Byte на стадии присвоения (Inp = MSComm1.Input) получите несоответствие типов. В этом случае VB возжелает чтобы переменная Inp была типа String. И ему плевать, что в настройках стоит .InputMode = comInputModeBinary.
Как преобразовывать строку из одного символа в переменую типа Byte я так и не разобрался. И ну его к чертям собачьим вместе с дебилом Гейтсом.