Hola, respecto a lo de la lectura del buffer, lo determina la propiedad inputlen, cuando esta a 0, te lee todo el buffer, si la pones a 1, te lee solo un byte cada vez que utilizes la instruccion mscomm1.input, y asi sucecivamente..
No soy un as en cuanto a visual basic, no se bien bien como maneja los datos,y todo eso, pero te contare mi experiencia:
Yo recibia a traves del serial una secuencia de datos, provenientes de un PIC que efectuaba conversiones analogico a digital, de 10 bits cada muestra, entonces, por cada muestra enviaba 2 bytes, la parte alta y la baja, por cada canal respectivamente.
Primero pense en leer el buffer cada 2 bytes, con inputlen=2, y despues en una variable, guardaba el primer byte, con la instruccion mid(), algo como sigue:
temp2 = mscomm1.input
temp1 = 256*asc(mid(temp2,1,1))
temp1 = temp1 + asc(mid(temp2,2,1))
y de esa manra, segun yo, obtenia en la variable temp1 el resultado de digamos el primer canal del adc, pero no....:S creo que fallaba debido a la forma en que maneja las cadenas el VB, como el modo de transmision estaba puesto en modotexto, pues habia algo que no entendia acerca de como trata el VB los datos, probe el modo binario y tampoco di con la solucion.
Asi que decidi establecer el inputlen =1, y aunque se extiende un poco el codigo, pero ahora si leia y procesaba lo que debia, y pum, asi arregle el problema de la lectura...

espero haberme dado a entender..

Por lo pronto publicare un nuevo post para resolver una duda extra.. pero hasta pronto..
