Salve a tutti,

iIo stavo realizzando un programma che fa le seguenti cose:

-il mio programmino dovrebbe ricevere i dati da un pc esterno tramite una connessione seriale sulla COM1
-i dati sono in formato file txt(piccolissimi, 1 kb)
-una parte dei dati viene visualizzata sul pc ricevente ed immessa in un record.

Funziona tutto bene se non fosse che, ad esempio, dopo aver spedito 13 volte lo stesso file, al 14° invio mi appare "Errore di run-time '13' Tipo non corrispondente" e il programma si pianta.

Come mai? Cioe' perche' a volte l'invio riesce perfettamente e a volte mi compare l'errore invece?

Questo e' il codice Form_Load:

codice:
Private Sub Form_Load()
   
Reload:
   
    ' Int seriale
    Set Comm = New DatiBilancia
    Comm.CommPort = 1
    Comm.Settings = "19200,N,8,1"
    Comm.OpenPort
    If Comm.State = 0 Then
       MsgBox "Impossibile aprire la porta"
       Comm.ClosePort
       GoTo Reload
    End If
    p = 0
    ' Attiva il timer per la lettura periodica sulla porta seriale
    Me.TimerInterval = 1000

End Sub
Questo e' il codice del Form_Timer:
codice:
Private Sub Form_Timer()

    dato = Comm.Rx
    
    If (dato <> 0) Then
         
nuovo_record:
        If (x < MaxBB) Then
            DoCmd.GoToRecord , , acNewRec
            Me.Lotto.Value = Form_MasInsacco.Lotto.Value
            Me.Numero.Value = Form_MasInsacco.Numero.Value
           ' Me.CodiceProdotto.Value = Form_MasInsacco.Prodotto.Value
            Me.Peso.Value = dato
            Me.BigBag.Value = x
            x = x + 1
        
             ' qui devo aspettare di ricevere i dati data, ora e peso
        Else
            DoCmd.GoToRecord , , acNewRec
            Me.Lotto.Value = Form_MasInsacco.Lotto.Value
            Me.Numero.Value = Form_MasInsacco.Numero.Value
          '  Me.CodiceProdotto.Value = Form_MasInsacco.Prodotto.Value
            Me.Peso.Value = dato
            Me.BigBag.Value = x
            GoTo fine
        End If
    
    GoTo end_sub
    
fine:
    
    DoCmd.Close
    
end_sub:
  
    End If
  
End Sub
E questo e' il codice della funzione Rx del modulo DatiBilancia:
codice:
'Lettura della porta seriale
Public Function Rx() As Double
   
   Const BufferLen = 66
   Dim ReceivedBytes As Long
   Dim Buffer(BufferLen - 1) As Byte
   Dim fSuccess As Integer
   Dim ferror As Integer
   Dim PesoReceive As String
   
   Dim Testo As String
   Dim Ok As Integer
   Dim Conf1 As Integer
   Dim Conf2 As Integer
   
   Dim Autotara As Double
   Dim Soglia1 As Double
   Dim Soglia2 As Double
   Dim PesoFinale As Double
   Dim CorrStat As Double
   Dim SogliaFinale As Double
   Dim TempoCiclo As Double
   Dim TempoVeloce As Double
   Dim TempoLento As Double
   Dim CodicePeso As String
   
   Ok = 0
   
   'Se la porta non è aperta esco
   If Not (hCom > 0) Then
      Exit Function
   End If
   ' legge dalla porta seriale; in particolare, imposta a 0 (NULL)
   ' l'ultimo parametro della ReadFile, poiche' la comunicazione
   ' sara' sincrona (non overlapped)
   fSuccess = ReadFile(hCom, Buffer(0), BufferLen, ReceivedBytes, 0)
   
   If (ReceivedBytes = 0) Then
      Exit Function
   End If
   
   If (fSuccess <> 0) Then
    'if ((Buffer(0) = "0x13)&(Buffer(1) = "0x10))
       PesoReceive = Left(StrConv(Buffer(), vbUnicode), ReceivedBytes)
       Testo = Left(PesoReceive, 3)
       Conf1 = StrComp(Testo, Chr$(13) & Chr$(10) & "+", 1)
       Conf2 = StrComp(Testo, Chr$(13) & Chr$(10) & "-", 1)
       If ((Conf1 = 0) Or (Conf2 = 0)) Then
            Ok = 1
            Autotara = CDbl(Mid$(PesoReceive, 2, 7))
            Soglia1 = CDbl(Mid$(PesoReceive, 9, 7))
            Soglia2 = CDbl(Mid$(PesoReceive, 16, 7))
            PesoFinale = CDbl(Mid$(PesoReceive, 23, 7))
            CorrStat = CDbl(Mid$(PesoReceive, 30, 7))
            SogliaFinale = CDbl(Mid$(PesoReceive, 37, 7))
            TempoCiclo = CDbl(Mid$(PesoReceive, 44, 7))
            TempoVeloce = CDbl(Mid$(PesoReceive, 51, 7))
            TempoLento = CDbl(Mid$(PesoReceive, 58, 7))
            CodicePeso = Mid$(PesoReceive, 66, 1)
       End If
   Else
      ferror = Err.LastDllError
      ' gestione errore
   End If
   If (Ok = 1) Then
        Rx = PesoFinale
   End If
   End Function
Vi ringrazio in anticipo