la prima cosa che mi viene in mente è:
hai controllato che la lunghezza del record sia giusta per la struttura?

potrebbe non interpretare il carattere di EOF

e poi perchè dichiari così?:
<VBFixedArray(23), VBFixedString(16)> Public CampoStringa() As String

o string o array ... o no?