Buongiorno a tutti...ho questo codice:

Private Sub Comando20_Click()
Dim codicesql As String
Dim CODICECANCELLA As String
Dim Operatore As String
If IsNull(Me.CasellaCombinata44) Then
MsgBox ("Seleziona metodo di pagamento")
Me.CasellaCombinata44.SetFocus
Else
Operatore = Me.Operatore.Value
DoCmd.SetWarnings False

If Me.Testo61.Value >= 0 And Me.Testo28.Value > 0 And Me.Testo78.Value >= 0 Then
Forms!m_scarico_magazzino_vendita!Sottomaschera_Query_buoni_tramite_ricevuta!incassato.Value = "si"
Forms!m_scarico_magazzino_vendita!Sottomaschera_Query_buoni_tramite_ricevuta!idvendita.Value = Me.OPERAZIONE.Value
ElseIf Me.Testo61.Value > 0 And Me.Testo28.Value > 0 And Me.Testo78.Value < 0 Then
If MsgBox("Vuoi creare un altro buono per l'importo restante", vbYesNo) = vbYes Then
Forms!m_scarico_magazzino_vendita!Sottomaschera_Query_buoni_tramite_ricevuta!incassato.Value = "si"
Forms!m_scarico_magazzino_vendita!Sottomaschera_Query_buoni_tramite_ricevuta!idvendita.Value = Me.OPERAZIONE.Value
DoCmd.OpenQuery ("aggiorna_residuo_buono")
DoCmd.OpenQuery ("crea_nuovo_buono_con_residuo")
End If
End If
Me.CasellaCombinata67.Value = Null
Me!CasellaCombinata67.Requery
Me.Sottomaschera_Query_buoni_tramite_ricevuta.Requery
Me!CasellaCombinata67.Requery
DoCmd.OpenQuery ("Trasferisci_carico_scarico_query_vendita")
CurrentDb.Execute "DELETE * FROM MOVIMENTI_MAGAZZINO_scarico"
Me.Sottomaschera_Query_inserimento_prodotti_vendita.Requery
MsgBox ("Vendita conclusa")
Dim opscon As String
opscon = DLookup("maxdioperazione", "query_scontrino")
Me.OPERAZIONE.Value = opscon + 1
Me.CODICE_CLIENTE.SetFocus
Me.Operatore.Value = Operatore
Me.CasellaCombinata44.Value = Null
Me.Testo23.Value = Null
Me.Testo78.Value = Null
Me.Testo61.Value = Null
DoCmd.SetWarnings True
Me.Testo28.Value = 0
End If
End Sub

La parte che mi interessa è quella in grassetto. In sostanza, se il valore del buono usato è maggiore del valore della vendita ti viene chiesto se con il residuo vuoi creare un altro buono.
Se clicchi di si:
nel campo "incassato" verrà inserito "SI", in questo modo il buono non sarà più presente nella query che ricerca il buono selezionato tra i buoni disponibili
nel campo "id vendita" viene inserito il numero dello scontrino
poi con una query di aggiornamento viene modificato il campo "residuo" di una sottomaschera, direttamente dalla query da cui dipende, impostando praticamente il valore che avrà il nuovo buono.
UPDATE Query_buoni_tramite_ricevuta SET Query_buoni_tramite_ricevuta.residuo = [Maschere]![M_scarico_magazzino_vendita]![Testo78]*-1;
poi con una query di accodamento verrà creato un nuovo record nella tabella "buoni" con origine "query_ricerca_ricevuta_buoni", il campo importo del nuovo record deriverà dal campo "residuo" dell'origine. Solo "id vendita", "incassato" non passeranno, in questo modo il nuovo buono sarà ancora tra i disponibili

 INSERT INTO Buoni ( [Codice cliente], Nome, Cognome, [Maggiorazione 10%], Data, Scadenza, [Numero registro], Importo )
SELECT Query_buoni_tramite_ricevuta.[Codice cliente], Query_buoni_tramite_ricevuta.Nome, Query_buoni_tramite_ricevuta.Cognome, Query_buoni_tramite_ricevuta.[Maggiorazione 10%], Query_buoni_tramite_ricevuta.Data, Query_buoni_tramite_ricevuta.Scadenza, Query_buoni_tramite_ricevuta.[Numero registro], Query_buoni_tramite_ricevuta.residuo
FROM Query_buoni_tramite_ricevuta;

Tutto funziona alla perfezione...tranne l'errore che mi dice
https://www.dropbox.com/s/r27bkfcmoq...2013.37.55.png

Mi basterebbe anche solo inibire l'errore... ho provato ad inserire su errore nella maschera
Private Sub Form_Error(DataErr As Integer, Response As Integer)
If DataErr = 7787 Then Response = acDataErrContinue
End Sub
ma si ripropone...

Grazie per la pazienza