Se ho capito bene, basta modificare il codice nel seguente modo:
Private Sub CalcolaSaldo()
Dim rs As DAO.Recordset
Dim lngIdSchedaCliente As Long
Dim lngPosizione As Long
Dim curTotaleImporto As Currency
Dim curTotaleImportoVersato As Currency
On Error Resume Next
Me.Recordset.Edit
Me.Recordset.Update
lngIdSchedaCliente = Me.IDSchedaCliente
lngPosizione = Me.Posizione
Set rs = CurrentDb.OpenRecordset("SELECT * FROM SchedaClienteDett WHERE IdSchedaCliente = " & lngIdSchedaCliente & " ORDER BY Posizione")
curTotaleImporto = Nz(DLookup("Sum(Importo)", "SchedaClienteDett", "IdSchedaCliente = " & Me.IDSchedaCliente), 0)
Do While Not rs.EOF
curTotaleImportoVersato = Nz(DLookup("Sum(Versati)", "SchedaClienteDett", "IdSchedaCliente = " & lngIdSchedaCliente & " AND Posizione <= " & rs!Posizione), 0)
rs.Edit
rs!SaldoVers = curTotaleImporto - curTotaleImportoVersato
rs.Update
rs.MoveNext
Loop
Me.Requery
Me.Recordset.FindFirst "IdSchedaCliente = " & lngIdSchedaCliente & " AND Posizione = " & lngPosizione
End Sub
- Se c'è la chiave primaria la Tab è indicizzata per quanto riguarda quel campo ma ad esempio nella tabella Rubrica non esiste nè un indice univoco per la P.I. nè per il C.F. il che potrebbe causare l'mmissione di record con valori che già sono assegnati ad altri record cosa che non dovrebbe accadere.
Comunque torno a dirti che il progetto, a parere mio per quello che si vede dal progetto postato, non è gestito nella maniera dovuta in quanto, per esempio, aggiornare un Versamento sotituendo il valore precedente con quello nuovo non ti permette di avere la visione dello storico dei movimenti, cosa che credo invece sia importante.
Ecc..