riddik ha scritto:
Cerco di essere più chiaro:
è evidente che se mi trovassi all'interno di una maschera, utilizzerei una combobox per selezionare il valore che mi serve.
Ma se i valori vengono letti, elaborati e accodati da codice vba e un campo letto non presenta nessun valore, come posso far intervenire l'utente per selezionare il valore e far andare avanti il codice?
per questo avevo pensato ad una funzione che mi apriva una maschera popup al cui interno vi è una combobox che mi fa selezionare il valore da passare al codice vba
Tecnicamente l'idea è corretta, apri una Form Popup in modalità Sincrona(acDialog) e fai selezionare il dato.
Non capisco tuttavia il problema nel realizzarlo... ti spiego come faccio io.
ListBox con il suo Origine dati, da Tabella o Elenco valori... che sia...!
Essendo al Form acDialog non puoi interagire se non passando un Parametro con Args e leggerlo con OpenArgs oppure un qualche cosa di Public Esterno.
Quindi se hai un RS e vuoi popolare la Lista con il Recordset, dichiaralo Public in un modulo e su Load
Set Me!NomeLista.Recordset=TuoRecordset
Su questi aspetti però io non ho capito nulla di come ti muovi... quindi vedrai tu.
Detto questo nella Form di selezione aperta in modalità Sincrona devi operare sull'evento Unload... sapendo che il codice riprende al Chiamante se e solo se, la Form(acDialog) si chiude, oppure se diventa NON VISIBILE.
Se la chiudi non potrai accedere ai dati di selezione a meno di salvarli in una variabile Public per poi recuperarli, altrimenti si può sfruttare il forzamento alla proprietà Visible=False per recuperare il valore e poi chiuderla... io uso il 2°.
La sequenza questa:
Form/Codice chiamante --->
Dim retVal As Variant
DoCmd.OpenForm "NomeForm", , , , , acDialog, "Eventuali Parametri"
retVal=Forms("NomeForm").ValoreSelezionato
DoCmd.Close acForm, "NomeForm"
nella Form di selezione invece
Public Function ValoreSelezionato() as Variant
ValoreSelezionato=Me.NomeListBox.Value
End Function
Private Sub Form_Unload(Cancel As Integer)
Cancel = Me.Visible
Me.Visible = False
End Sub
Ovviamente ho omesso gestione errori, il controllo del Selezionato sulla Lista che potrebbe inibire la chiusura e lasciare la Form di selezione Visibile...
Vedi tu.