L'errore che ti da non ha a che fare col numero di record, ma con la lunghezza record. Lo da quando la lunghezza di quello che leggi/scrivi tramite l'istruzione get/put (in questo caso TRec) non corrisponde a quella dichiarata nella Open (Len = Len(TRec)).
Nel tuo caso è apparentemente corretto.
Dovresti postare la struttura RecArticolo. Se in quella struttura dichiari delle variabili String (come per esempio la Descrizione) devi assicurarti che sia dichiarata anche la sua lunghezza.
Per esempio è errato scrivere...
codice:
Type RecArticolo
Codice As String
Descrizione As String
Prezzo As Double
Quantita As Long
End Type
ma è corretto scrivere...
codice:
Type RecArticolo
Codice As String * 10
Descrizione As String * 50
Prezzo As Double
Quantita As Long
End Type
Nel primo caso quando utilizzi Len(TRec) per ogni campo String vengono riservati solo 4 bytes, e se inserisci nel campo Descrizione una stringa superiore a 4 bytes ecco giustificato l'errore. Devi quindi prevedere una lunghezza massima per ogni campo di tipo String.
Ha senso anche dal punto di vista logico. Dal tuo programma mi sembra di capire che vuoi aggiungere un record in fondo al file. Con l'istruzione Put il programma si posiziona al byte = LunghezzaRecord * NumeroDiRecord + 1, quindi perforza i record devono essere tutti lunghi uguali.
Visto che il codice da te postato sembra corretto, ma non hai postato tutto, è solo l'ipotesi + logica.