Apertura Maschera da campo "non in elenco"

di il
10 risposte

Apertura Maschera da campo "non in elenco"

Ciao a tutti e buon anno.

Ho un problema di queto tipo:
ho creato una maschera M_NuovaCommessa nella quale ho inserito una combo box RAG_SOC_SE, nella quale mi compare un elenco di nominativi da selezionare.
Ho provato ad impostare una routine con cui verifico se il nominativo che devo richiamare è presente nella combo.
Se non presente, mi esce una message box YesNo per cui, se annullo mi torna sulla combo, se confermo mi apre una maschera M_Anagrafica2 nella quale posso inserire il nuovo nominativo.
Il richiamo della maschera funziona, però la message box YesNo mi compare due volte e non capisco il perchè…
Premetto che sono alle primissime armi e sono molto ignorante in materia, per cui vorrei chiedere il vostro gentilissimo aiuto.
La routine che ho creato è questa:

Private Sub RAG_SOC_SE_NotInList(NewData As String, Response As Integer)
Response = acDataErrContinue

Dim intRisposta As Integer

intRisposta = MsgBox(NewData & " non esiste come Cliente. Vuoi inserirlo?", vbYesNo)

       If intRisposta = vbYes Then
             DoCmd.OpenForm "M_anagrafica2", , , , , , NewData
       End If
   
End Sub

Grazie mille in anticipo.

10 Risposte

  • Re: Apertura Maschera da campo "non in elenco"

    Prova a mettere

    Response = acDataErrContinue

    prima di End Sub

  • Re: Apertura Maschera da campo "non in elenco"

    13/01/2023 - OsvaldoLaviosa ha scritto:


    Prova a mettere

    Response = acDataErrContinue

    prima di End Sub

    Grazie per la risposta.
    Avevo già provato, ma non era cambiato nulla…

  • Re: Apertura Maschera da campo "non in elenco"

    “enricoforni63”

    Il richiamo della maschera funziona, però la message box YesNo mi compare due volte e non capisco il perchè…

    Il solo codice scritto così è incompleto. Hai anche un codice che gestisce la maschera M_anagrafica2 accogliendo il valore di Me.OpenArgs?

    DoCmd.OpenForm "M_anagrafica2", , , , , , NewData

    manca (per prassi) la proprietà acDialog

    e nella riga successiva occorre scrivere

    Me!RAG_SOC_SE.Requery
  • Re: Apertura Maschera da campo "non in elenco"

    13/01/2023 - OsvaldoLaviosa ha scritto:


    “enricoforni63”

    Il richiamo della maschera funziona, però la message box YesNo mi compare due volte e non capisco il perchè…

    Il solo codice scritto così è incompleto. Hai anche un codice che gestisce la maschera M_anagrafica2 accogliendo il valore di Me.OpenArgs?

    DoCmd.OpenForm "M_anagrafica2", , , , , , NewData

    manca (per prassi) la proprietà acDialog

    e nella riga successiva occorre scrivere

    Me!RAG_SOC_SE.Requery

    Niente da fare… se aggiungo acDialog mi apre la maschera in formato tabella e se aggiungo la Requery mi dice che devo prima salvare i dati.
    Comunque nella tabella M_Anagrafica2 non uso il codice Me.OpenArgs
    Non so se può c'entrare qualcosa, ma mi ero dimenticato di dire che, quando confermo l'inserimento del nuovo cliente, mi apre la maschera M_Anagrafica2 e chiude la maschera M_NuovaCommessa. Terminato l'inserimento del nuovo cliente, chiude M_Anagrafica2 e riapre M_NuovaCommessa correttamente.

  • Re: Apertura Maschera da campo "non in elenco"

    Private Sub RAG_SOC_SE_NotInList(NewData As String, Response As Integer)
    Dim intRisposta As Integer
    intRisposta = MsgBox(NewData & " non esiste come Cliente. Vuoi inserirlo?", vbYesNo)
           If intRisposta = vbYes Then
                 DoCmd.OpenForm "M_anagrafica2", , , , acFormAdd, acDialog, NewData 'NewData si trova nell'argomento OpenArgs 
                                                                    che è una proprietà che si può gestire solo in VBA.
                                                                    acDialog apre la maschera in una particolarissima modalità
                                                                    compatta tipo "dialogo" che impedisce a "questo" codice
                                                                    di proseguire. Quindi è necessario gestire anche il codice
                                                                    di caricamento della maschera M_anagrafica2...vedi dopo
                 Me!RAG_SOC_SE.Requery  'dopo aver chiuso la maschera M_anagrafica2, il codice riprende qui aggiornando 
                                         la casella combinata RAG_SOC_SE
           End If
    Response = acDataErrContinue 
    End Sub
    Private Sub Form_Load()
    Me!Cliente = Me.OpenArgs     'Me.OpenArgs ha appena accolto il valore passato da NewData del codice precedente e lo va a scrivere nel campo
                                                           testuale significativo della maschera M_anagrafica2.
                                                          A questo punto compili anche gli altri campi e chiudi la maschera di dialogo M_anagrafica. Quindi il codice
                                                           dell'altra maschera riprende da dove si era interrotta.
    End Sub

    Per gestire l'evento NotInList devi lavorare su 2 fronti come indicato qui sopra

  • Re: Apertura Maschera da campo "non in elenco"

    13/01/2023 - OsvaldoLaviosa ha scritto:


    Private Sub RAG_SOC_SE_NotInList(NewData As String, Response As Integer)
    Dim intRisposta As Integer
    intRisposta = MsgBox(NewData & " non esiste come Cliente. Vuoi inserirlo?", vbYesNo)
           If intRisposta = vbYes Then
                 DoCmd.OpenForm "M_anagrafica2", , , , acFormAdd, acDialog, NewData 'NewData si trova nell'argomento OpenArgs 
                                                                    che è una proprietà che si può gestire solo in VBA.
                                                                    acDialog apre la maschera in una particolarissima modalità
                                                                    compatta tipo "dialogo" che impedisce a "questo" codice
                                                                    di proseguire. Quindi è necessario gestire anche il codice
                                                                    di caricamento della maschera M_anagrafica2...vedi dopo
                 Me!RAG_SOC_SE.Requery  'dopo aver chiuso la maschera M_anagrafica2, il codice riprende qui aggiornando 
                                         la casella combinata RAG_SOC_SE
           End If
    Response = acDataErrContinue 
    End Sub
    Private Sub Form_Load()
    Me!Cliente = Me.OpenArgs     'Me.OpenArgs ha appena accolto il valore passato da NewData del codice precedente e lo va a scrivere nel campo
                                                           testuale significativo della maschera M_anagrafica2.
                                                          A questo punto compili anche gli altri campi e chiudi la maschera di dialogo M_anagrafica. Quindi il codice
                                                           dell'altra maschera riprende da dove si era interrotta.
    End Sub

    Per gestire l'evento NotInList devi lavorare su 2 fronti come indicato qui sopra

    Grazie mille Osvaldo per la tua risposta. Appena riesco a rimettere le mani sul pc interessato, provo ad applicare le tue indicazioni. 

    Avevo immaginato che bisogna lavorare su 2 fronti… InfattiInfatti ho verificato che, se non eseguo la chiusura della maschera quando confermo l'inserimento del nuovo cliente, il problema non si presenta. Ti faccio sapere appena riesco. Buon weekend 

  • Re: Apertura Maschera da campo "non in elenco"

    13/01/2023 - OsvaldoLaviosa ha scritto:


    Private Sub RAG_SOC_SE_NotInList(NewData As String, Response As Integer)
    Dim intRisposta As Integer
    intRisposta = MsgBox(NewData & " non esiste come Cliente. Vuoi inserirlo?", vbYesNo)
           If intRisposta = vbYes Then
                 DoCmd.OpenForm "M_anagrafica2", , , , acFormAdd, acDialog, NewData 'NewData si trova nell'argomento OpenArgs 
                                                                    che è una proprietà che si può gestire solo in VBA.
                                                                    acDialog apre la maschera in una particolarissima modalità
                                                                    compatta tipo "dialogo" che impedisce a "questo" codice
                                                                    di proseguire. Quindi è necessario gestire anche il codice
                                                                    di caricamento della maschera M_anagrafica2...vedi dopo
                 Me!RAG_SOC_SE.Requery  'dopo aver chiuso la maschera M_anagrafica2, il codice riprende qui aggiornando 
                                         la casella combinata RAG_SOC_SE
           End If
    Response = acDataErrContinue 
    End Sub
    Private Sub Form_Load()
    Me!Cliente = Me.OpenArgs     'Me.OpenArgs ha appena accolto il valore passato da NewData del codice precedente e lo va a scrivere nel campo
                                                           testuale significativo della maschera M_anagrafica2.
                                                          A questo punto compili anche gli altri campi e chiudi la maschera di dialogo M_anagrafica. Quindi il codice
                                                           dell'altra maschera riprende da dove si era interrotta.
    End Sub

    Per gestire l'evento NotInList devi lavorare su 2 fronti come indicato qui sopra

    Ciao Osvaldo, ho provato ad applicare i tuoi suggerimenti e funzionano bene fino al comando Me!RAG_SOC_SE.Requery
    Mi esce un errore run-time 2118 specificando che "E' necessario salvare il campo corrente prima di eseguire l'azione RieseguiQuery"

  • Re: Apertura Maschera da campo "non in elenco"

    L'evento NotInList si può gestire in molti modi. Leggi per esempio qui
    FAQIndex (donkarl.com) Variante 2,
    dove però non si fa uso di acDialog (pensato appositamente per queste situazioni) e il tutor dell'articolo suggerisce l'evento Chiusura.
    Io addirittura non amo acDialog e preferisco mettere un pulsante Aggiorna nella Maschera2 che si occupa di fare tutti gli aggiornamenti nella combobox di Maschera1.

  • Re: Apertura Maschera da campo "non in elenco"

    16/01/2023 - OsvaldoLaviosa ha scritto:


    L'evento NotInList si può gestire in molti modi. Leggi per esempio qui
    FAQIndex (donkarl.com) Variante 2,
    dove però non si fa uso di acDialog (pensato appositamente per queste situazioni) e il tutor dell'articolo suggerisce l'evento Chiusura.
    Io addirittura non amo acDialog e preferisco mettere un pulsante Aggiorna nella Maschera2 che si occupa di fare tutti gli aggiornamenti nella combobox di Maschera1.

    Grazie mille Osvaldo per le tue dritte! Non so come, ma non vedo più una parte di questa discussione… Comunque il tuo ultimo suggerimento ha risolto e ora funziona tutto! Terrò presente anche questo ultimo suggerimento, perchè dovrò ancora lavorare parecchio su questo progetto. Non ho particolare fretta, ma ho davvero pochi ritagli di tempo da dedicargli, per cui mi sa che dovrò ancora chiedere aiuto.

    Grazie ancora

  • Re: Apertura Maschera da campo "non in elenco"

    16/01/2023 - enricoforni63 ha scritto:


    Non so come, ma non vedo più una parte di questa discussione

    …avevo scritto del codice VBA, poi cancellato perchè mi sa che non avrebbe funzionato…

    16/01/2023 - enricoforni63 ha scritto:


    Non ho particolare fretta, ma ho davvero pochi ritagli di tempo da dedicargli, per cui mi sa che dovrò ancora chiedere aiuto.

    Lavora con calma e impara sbagliando a piccoli passi. S'impara moltissimo sul lungo tempo.
    Il forum è aperto a tutti i dubbi che vuoi. Ovviamente, secondo regolamento del forum, per ogni argomento diverso, apri una nuova discussione.

Devi accedere o registrarti per scrivere nel forum
10 risposte