La cosa migliore è crearti una Funzione in un Modulo che prevede 4 parametri, ovviamente ID1, ID2, Carico e Reddito.
Public Function fRedditoTotale(Id1 As Long, Id2 As Long, Carico As Boolean, Reddito As Currency) As Currency
....
End Function
Questa funzione in sostanza deve tradurre quello che hai scritto, l'unica variante alla logica che hai scritto è che, dato ID2(famigliare) nel caso non sia a Carico immagino, devi andare a cercare il Record che ha ID1=ID2(del dato attuale) per ricavare il suo Reddito...!
Il tutto si deve ovviamente fare con l'uso del VBA aprendo Recordset... tramite una Query:
"SELECT * FROM Tabella WHERE ID1=" ID2
Il tutto diverrebbe:
Public Function fRedditoTotale(Id1 As Long, Id2 As Long, Carico As Boolean, Reddito As Currency) As Currency
Dim rs As DAO.Recordset
Dim sSQL As String
Dim cReddTot As Currency
If Carico=False Then
sSQL="SELECT * FROM Tabella WHERE ID1=" ID2
DbEngine(0)(0).OpenRecordset(sSQL)
If Rs.EOF
msgBox "NON ESISTE"
Else
cReddTot =rs.Fields("Reddito").Value
End If
rs.close
set rs=nothing
End If
' nella Variabile cReddTot hai il Reddito del Familiare non a carico
' quindi ora lo puoi sommare al parametro Reddito che è il Reddito del TITOLARE
' ovviamente condizionando il tutto con le logiche che hai riportato
.....
cReddTot = cReddTot + Reddito
fRedditoTotale=cReddTot
End Function
A questo punto questa funzione la puoi richiamare da Query o da Maschera(io preferisco da Query soprattutto se deve alimentare una Maschera continua).
Spero sia chiaro, ma potrei aver frainteso la logicha degli ID1/ID2...