VBA Not In List ed eventuale modifica

di il
8 risposte

VBA Not In List ed eventuale modifica

Con questo codice VBA:

Private Sub cboIngredienti_NotInList(NewData As String, Response As Integer)
Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim strMsg As String

    strMsg = "'" & NewData & "' non è un nome disponibile"
    strMsg = strMsg & vbCrLf & "Desidera aggiungerlo all'elenco ?"
    strMsg = strMsg & vbCrLf & "Clic su Sì per aggiungerlo, su No " & "per selezionarne uno esistente."
    
    If MsgBox(strMsg, vbQuestion + vbYesNo, "Aggiungere un nuovo Ingrediente ?") = vbNo Then
        Response = acDataErrContinue
    Else
        Set db = CurrentDb
        Set rs = db.OpenRecordset("INGREDIENTI", dbOpenDynaset)
        rs.AddNew
        rs!NomeIngrediente = NewData
        rs.Update
        rs.Close
        
        Response = acDataErrAdded
    End If
End Sub
inserisco nuovi valori nella cbo (che ha una colonna associata, ed ha origine riga la tabella Ingredienti), in particolare nuovi ingredienti nella omonima tabella.
Poi entro nella maschera sulla tabella ingredienti e compilo i campi rimasti vuoti, dato che in tabella Ingredienti non ho solo IDIngredienti e NomeIngrediente, ma anche altri campi.
Come sarebbe possibile modificare, se lo è, questo codice per inserire gli altri dati nella tabella ingredienti, non presenti nella cbo ?

8 Risposte

  • Re: VBA Not In List ed eventuale modifica

    Questo metodo, che poi è Quello suggerito nella guida... si usa solo per inserimenti semplici in tabelle di definizione scelte...
    Il metodo corretto è aprire la maschera di inserimento in modalità acDialog SINCRONA passargli in apertura il parametro NewData usando OpenArg e valorizzarlo su load.
    Poi inserisci e chiudi... a questo punto ritorna all'evento notinlist e procedi con acdatafroradd e Requery della combo.
  • Re: VBA Not In List ed eventuale modifica

    ProgrammD ha scritto:


    dato che in tabella Ingredienti non ho solo IDIngredienti e NomeIngrediente, ma anche altri campi.Come sarebbe possibile modificare, se lo è, questo codice per inserire gli altri dati nella tabella ingredienti, non presenti nella cbo ?
    Mmhhh...come dire...per me bisogna sapersi accontentare della potenzialità che una casella combinata offre. Il fatto che tu, già mentre stai digitando i primi caratteri nella casella combinata, nella maggior parte dei casi "fiuti" già se un valore c'è o non c'è. Quindi mi sembra "naturale" che tu DEBBA inesorabilmente aprire la maschera Ingredienti e "piano-piano" "bello-bello" inserire tutti i campi.

    Volendo rispondere "alla lettera" alla tua domanda...mi pare si possa fare, ma occorre un controllo relativamente complesso in VBA e soprattutto organizzare la casella combinata con opportuni caratteri di separazione. Ricordo un vago esempio nei casi in cui si preferisce una casella combinata con formato
    Cognome, Nome (con la virgola che separa).
    Sta a te dover ogni volta digitare anche tale virgola (o altro carattere di separazione)...ecc...
    Tutto sommato...poi (dal mio punto di vista)...ne vale la pena?
  • Re: VBA Not In List ed eventuale modifica

    Osvaldo non ci si accontenta ma si sfrutta lo strumento come va usato... Non ti inventare cose strane la soluzione è semplicissima e funzionale come ho descritto... 3 righe di codice in tutto.
  • Re: VBA Not In List ed eventuale modifica

    Ho la sensazione che si stia parlando di 2 cose diverse. Tu hai proposto l'ottimizzazione di quel codice: OK. Ma mi pare di capire che ProgrammD vorrebbe DIGITARE direttamente dentro la casella combinata qualcosa che deve essere poi distribuito nei vari campi di Ingredienti...QUASI senza scomodare l'apertura della maschera Ingredienti per compilarne i campi...
    Se ho frainteso io: sorry. Altrimenti ProgrammD dovrebbe chiarire cosa vuole ottenere.
  • Re: VBA Not In List ed eventuale modifica

    Io non ho proposto ottimizzazioni... ma la soluzione al problema tecnico.
    Lui vuole inserire non solo UN campo, quello che viene valorizzato dalla digitazione, ma tutti quelli associati alla tabella origine... quindi per farlo si usa il metodo che ho indicato.
  • Re: VBA Not In List ed eventuale modifica

    Forse non era chiaro all'inizio della discussione.
    Quello che vorrei è:
    digito un nome che non c'è nella cbo collegata alla tabella X;
    entra in azione il codice NOT IN LIST per l'aggiunta di un nuovo nome;
    e poi subito dopo, in automatico, direttamente dal codice NOT IN LIST, si apre una maschera dove vado a riempire gli altri campi della tabella.
  • Re: VBA Not In List ed eventuale modifica

    OK, io ho frainteso tutto.
    Prova a leggere qui
  • Re: VBA Not In List ed eventuale modifica

    Grazie del link.
    Prossimamente lo metterò in pratica.
    Saluti.
Devi accedere o registrarti per scrivere nel forum
8 risposte