Esprimo un mio parere, anche sui suggerimenti di Carletto che reputo errati in senso tecnico, a partire dal suggerimento di NON NOMINARE i controlli come i campi... cosa che invece io trovo la cosa estremamente comoda e funzionale, quindi magari spieghiamo perchè di questo assunto...., stessa cosa per i campi VUOTI... la proprietà di definizione la si usa con intenzionalità e non di default...!
In prima cosa, se non si gestisce la modalità [acDialog] la tecnica richiede che la Form di ADD sia vincolata con codice incrociato e questa è una cosa da evitare...!
Seconda cosa, le combobox espongono l'evento NOTINLIST, ed è quello da usare per l'inserimento del NUOVO aprendo la Form di Inserimento.
Il Digitato si passa come OpenArgs e si definisce come Value nella Form aperta in Aggiunta al Controllo associato.
Le variabili devono essere dichiarare in modo corretto, e questo non lo è assolutamente, è un errore che va capito e corretto.
Dim Msg, Style, Title, Help, Ctxt, Response, MyString
Si deve inserire la dichiarazione ESPLICITA delle VARIABILI che si trova negli STRUMENTI--->OPZIONI--->EDITOR del VBA
Option Compare Database
Option Explicit
In questo modo il codice nella Form Equipaggiamento, corretto da usare è questo:
Private Sub id_tipologia_NotInList(NewData As String, Response As Integer)
If MsgBox("Value is not in list. Add it?", vbOKCancel) = vbOK Then
' Set Response argument to indicate that data
' is being added.
Response = acDataErrAdded
' Add string in NewData argument to row source.
DoCmd.OpenForm "Tipologie", acNormal, , , acFormAdd, acDialog, NewData
Else
' If user chooses Cancel, suppress error message
' and undo changes.
Response = acDataErrContinue
Me.id_tipologia.Undo
End If
End Sub
Mentre nella Form [Tipologie]:
Option Compare Database
Option Explicit
Private Sub form_load()
If Len(Me.OpenArgs) > 0 Then
Me.tipologia.Value = Me.OpenArgs
Me.tipologia.SetFocus
End If
End Sub
Private Sub Form_Unload(Cancel As Integer)
DoCmd.RunCommand acCmdSaveRecord
End Sub
Detto questo in realtà siccome l'inserimento in questo caso è di quanto già digitato nella TextBox senza altri dati aggiunti,
si può assolutamente evitare di avere una MASCHERA... il che è esattamente quanto viene riportato nella GUIDA MS:
https://msdn.microsoft.com/en-us/vba/access-vba/articles/combobox-notinlist-event-access
In pratica si apre un RS sulla Tabella Tipologie, e recuperando il Parametro NEWDATA dell'evento NotInlist si aggiunge direttamente.
Il tutto porterebbe quindi ad eliminare la Maschera Tipologie ed a modificare il codice dell'Evento NOTINLIST della Combo:
Private Sub id_tipologia_NotInList(NewData As String, Response As Integer)
Dim oRS As DAO.Recordset, i As Integer, sMsg As String
If MsgBox("Value is not in list. Add it?", vbOKCancel) = vbOK Then
' Set Response argument to indicate that data
' is being added.
Response = acDataErrAdded
Set oRS = DBEngine(0)(0).OpenRecordset("Tbl_Tipologie")
oRS.AddNew
oRS.Fields("tipologia").Value = NewData
oRS.Update
oRS.Close
Set oRS=Nothiung
Else
' If user chooses Cancel, suppress error message
' and undo changes.
Response = acDataErrContinue
Me.id_tipologia.Undo
End If
End Sub