Acquista i nostri libri consigliati su Amazon.it
+ Rispondi al messaggio
Pagina 1 di 2 12 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14

Maschera generica di input via ComboBox

  1. #1
    Trappy non è in linea Novello
    Buongiorno a tutti.
    Poiché non esiste un inputBox con casella combinata ed io la uso spesso, ho provato a parametrizzare una maschera creandomi una function che la apre con etichetta e popolamento della combo passati negli argomenti. Normalmente creavo molte maschere dedicate sostanzialmente uguali nella forma visiva, ma "bloccate" ognuna sulla propria "origine riga" ed all'uscita andavo ad inserire il risultato direttamente nella destinazione.

    Ho creato quindi la maschera in figura



    con il seguente codice:

    Da Form_InputComboBox:

    Private Sub Form_Load()
        Me.Scelta.Value = Me.Scelta.ItemData(Me.Scelta.ListCount - 1) 'Seleziono l'ultimo valore
    End Sub
    
    Private Sub Scelta_KeyUp(KeyCode As Integer, Shift As Integer)
        If KeyCode = 13 Then Me.Visible = False 'Se premo INVIO chiudo la maschera
    End Sub
    
    Da form che contiene il pulsante "Prove":

    Private Sub Prove_Click()
        IB_Etichetta = "Esercizio"
        IB_Query = "SELECT Movimenti.Esercizio FROM Movimenti GROUP BY Movimenti.NomeBreve, Movimenti.Esercizio, Movimenti.[Esercizio] HAVING (((Movimenti.NomeBreve)=[Maschere]![Menù]![NomeBreveCombo])) ORDER BY Movimenti.[Esercizio];"
        sc = InputCBox(IB_Etichetta, IB_Query)
        MsgBox sc
    End Sub
    
    Funzione:

    Public Function InputCBox(Etichetta As String, Tabella As String)
        Form_InputComboBox.Etichetta.Caption = Etichetta
        Form_InputComboBox.Scelta.RowSource = Tabella
        DoCmd.OpenForm "InputComboBox", acNormal, , , , acDialog
        InputCBox = Form_InputComboBox.Scelta.Text 
        DoCmd.Close acForm, "InputComboBox" ', acSaveNo
    End Function
    
    Il problema è che "MsgBox sc" restituisce risposte a caso tra i valori dell'origine e null.
    Inoltre spesso viene ignorato il comando in Form_Load() con cui riempio la finestrella del combo all'apertura della maschera.

    Dove sbaglio?
    Ultima modifica di Trappy; 03-07-2021 10:56 

  2. #2
    L'avatar di @Alex
    @Alex non è in linea Moderatore Globale
    Nella funzione fai riferimento a delle properties della form che non è aperta... ti sei accorto. ?
    Il problema con le form aperte in modalità Dialog è che sono sincrona e modali quindi il codice chiamante non viene gestito... oltretutto non puoi chiuderla e poi andare a leggere i valori...
    L'approccio che usi è completamente errato.
    Io passo una classe come riferimento tramite il suo pointer la uso per gestire la form e sfrutto la classe stessa per recuperare valori...
    È un approccio più tecnico ma forse un po più avanzato di quanto possa servirti.
    Usa delle variabili public in un modulo da gestire come appoggio bidirezionale che valorizzi prima di aprire la for.e. vai a leggere su load, ed altre variabili che valorizzi su chiusura della form e leggi dopo per sapere le selezioni fatte.
    ℹ️ Leggi di più su @Alex ...

  3. #3
    OsvaldoLaviosa non è in linea Topo di biblioteca
    Quote Originariamente inviato da Trappy
    Normalmente creavo molte maschere dedicate sostanzialmente uguali nella forma visiva, ma "bloccate" ognuna sulla propria "origine riga"
    Non sono sicuro di aver compreso a pieno il problema. Vuoi forse dire che preferisci avere una sola maschera con combobox e, a seconda di quello che ti serve poi, decidere cosa deve apparire come Etichetta e cosa andare a metterci dentro nel RowSource della casella combinata?
    ℹ️ Leggi di più su OsvaldoLaviosa ...

  4. #4
    Trappy non è in linea Novello
    Quote Originariamente inviato da OsvaldoLaviosa Visualizza il messaggio
    Non sono sicuro di aver compreso a pieno il problema. Vuoi forse dire che preferisci avere una sola maschera con combobox e, a seconda di quello che ti serve poi, decidere cosa deve apparire come Etichetta e cosa andare a metterci dentro nel RowSource della casella combinata?
    Esatto. Proprio quello che voglio.

  5. #5
    Trappy non è in linea Novello
    Quote Originariamente inviato da @Alex Visualizza il messaggio
    Nella funzione fai riferimento a delle properties della form che non è aperta... ti sei accorto. ?
    Il problema con le form aperte in modalità Dialog è che sono sincrona e modali quindi il codice chiamante non viene gestito...
    Paradossalmente sono le uniche due cose che funzionano sempre come puoi vedere dalla foto...

  6. #6
    Trappy non è in linea Novello
    Quote Originariamente inviato da @Alex Visualizza il messaggio
    Nella funzione fai riferimento a delle properties della form che non è aperta... ti sei accorto. ?
    Il problema con le form aperte in modalità Dialog è che sono sincrona e modali quindi il codice chiamante non viene gestito...
    Paradossalmente sono le uniche due cose che funzionano sempre, come puoi vedere dalla foto...

    Quote Originariamente inviato da @Alex Visualizza il messaggio
    oltretutto non puoi chiuderla e poi andare a leggere i valori...
    Non la chiudo, la nascondo con hide... così ho trovato sul web ed anche questa è una cosa che funziona perché se procedo passo-passo la variabile "InputCBox" (il ritorno nella function) è corretta, ma poi nella variabile "sc" e nella finestra msgbox compare un altro valore...
    Ultima modifica di Trappy; 03-07-2021 13:21 

  7. #7
    Trappy non è in linea Novello
    Quote Originariamente inviato da @Alex Visualizza il messaggio
    Nella funzione fai riferimento a delle properties della form che non è aperta... ti sei accorto. ?
    Il problema con le form aperte in modalità Dialog è che sono sincrona e modali quindi il codice chiamante non viene gestito...
    Paradossalmente sono le uniche due cose che funzionano sempre come puoi vedere dalla foto...
    Quello che non funziona è proprio quello che scrivo in Form_load dove la finestra è già aperta...

    Quote Originariamente inviato da @Alex Visualizza il messaggio
    oltretutto non puoi chiuderla e poi andare a leggere i valori...
    Non la chiudo, la nascondo con hide... così ho trovato sul web ed anche questa è una cosa che funziona perché se procedo passo-passo la variabile "InputCBox" (il ritorno nella function) è corretta, ma poi nella variabile "sc" e nella finestra msgbox compare un altro valore...

  8. #8
    Trappy non è in linea Novello
    Ma scusate, ogni volta che modifico il messaggio lo ripete?

    La prima volta ho pensato ho sbagliato io, la seconda sono sicuro di aver modificato il messaggio e non si è cancellato quello vecchio... sono rimasti entrambi!!!

  9. #9
    Trappy non è in linea Novello
    Ho aggiunto "As String" nella dichiarazione della function e ho inizializato le variabili

    Public Function InputCBox(Etichetta As String, Tabella As String) As String
    
    Private Sub Prove_Click()
        Dim IB_Etichetta, IB_Query As String
    
    Ed ora sembra funzionare tutto...

  10. #10
    Trappy non è in linea Novello
    Seguendo ciò che mi ha detto @Alex, ho modificato così la funzione:

    Public Function InputCBox(Etichetta As String, Tabella As String) As String
        DoCmd.OpenForm "InputComboBox", acNormal, , , , acDesign
        Form_InputComboBox.Etichetta.Caption = Etichetta
        Form_InputComboBox.Scelta.RowSource = Tabella
        DoCmd.Close acForm, "InputComboBox", acSaveYes
        DoCmd.OpenForm "InputComboBox", acNormal, , , , acDialog
        InputCBox = Form_InputComboBox.Scelta.Text
        DoCmd.Close acForm, "InputComboBox", acSaveNo
    End Function
    
    Ora è più corretta?

+ Rispondi al messaggio
Pagina 1 di 2 12 ultimoultimo

Potrebbero interessarti anche ...

  1. maschera input in excel
    Da pluffete nel forum Microsoft Excel
    Risposte: 6
    Ultimo Post: 22-01-2008, 13:18
  2. Ricerca generica su maschera access
    Da fazer1000 nel forum Microsoft Access
    Risposte: 6
    Ultimo Post: 22-11-2006, 14:36
  3. maschera input
    Da pluffete nel forum Microsoft Word
    Risposte: 1
    Ultimo Post: 20-12-2005, 09:30
  4. maschera di input personalizzata
    Da PEPPEDIK nel forum Microsoft Word
    Risposte: 1
    Ultimo Post: 18-10-2005, 17:30
  5. maschera di input
    Da treasure nel forum Microsoft Word
    Risposte: 2
    Ultimo Post: 04-03-2005, 11:34