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?