29/01/2026 - sihsandrea ha scritto:
Quale maschera?
quella che c'è nella prima riga dello snippet
DoCmd.OpenForm "frmElenco01"
29/01/2026 - sihsandrea ha scritto:
Quali controlli?
quelli che ci sono nelle successive 4 righe dello snippet
Forms!frmElenco01!lblEtichetta1.Caption = "TESTO"
Forms!frmElenco01!txtMaschera = "X"
Forms!frmElenco01!cbxElenco01.RowSource = QUERY DI SELEZIONE
Forms!frmElenco01!cbxElenco01.Requery
29/01/2026 - sihsandrea ha scritto:
In che senso? Quale codice metti in pausa?
Il pulsante ha la seconda parte del codice da eseguire?
qui effettivamente sono stato criptico.
la form frmElenco01 ha 4 soli controlli: una combo (con relativa etichetta), una textbox, un pulsante OK e uno ESCI
La query che indico non è nulla di particolare:
"SELECT [IDFamiliare], [Nome] FROM tblDipendentiDett WHERE [IDDipendente]=" & IDDipendente & " AND [IDParentela]=8"
la combo si popola correttamente. La textbox mi serve per un indice numerico (in questo caso 3) che poi userò nel select case.
Il codice che metto in pausa è una funzione che dovrà fare una verifica su una tabella in base ad un ID che prenderà dalla combobox (in questo caso [IDFamiliare]) per poi restituire un valore booleano.
come ci arrivo a questa "form multiuso": da una form principale apro una seconda form (frmRegistro) dove, oltre ad altri controlli, ho una combobox. In base al valore che scelgo in questa combo, il db può o prendere il dato così com'è, oppure, come in questo caso, effettuare una verifica. In questo caso si apre la mia "form multiuso" (frmElenco01) e viene popolata la combobox con la query sopra indicata. A questo punto la funzione si mette in pausa finchè non scelgo un valore dalla combo di frmElenco01 e do l'OK: il valore della colonna 0 della combo (cioè IDFamiliare) dovrebbe essere passato ad una variabile globale (usata nella funzione che nel frattempo è ancora in loop) e quando chiudo la frmElenco01 la funzione esce dal loop e va avanti con il controllo che deve fare restituendo il valore booleano.
Il problema è che apro la combo in frmElenco01, vedo esattamente i valori che mi aspetto di trovare, ma non li posso selezionare. O meglio, io li posso selezionare, ma l'elenco a discesa rimane aperto, di fatto non permettendomi di selezionare la voce che voglio per poi confermarla con OK.
Quando do l'OK, il select case di cui accennavo è strutturato in questo modo (evento SuClick de l pulsante OK):
Select Case Me.txtMaschera
Case 1 'Indirizzi
Case 2 'Creare un elenco
Case 3
IDFiglio = Me.cbxElenco01.Column(0)
DoCmd.Close
End Select
ometto i codici dei casi 1 e 2 (come detto la form è multiuso, in altre parti del db mi serve visualizzare degli elenchi di valori nella combo e selezionarli, per poi farci qualcosa)
Nel caso in questione, me.txtmaschera vale 3, quindi esegue il Case 3. Una volta passato il valore della combo alla variabile globale IDFiglio, la form multiuso si dovrebbe chiudere e la funzione uscire dal loop e continuare (al momento non fa nulla tranne restituirmi come verifica a debug il valore della variabile globale).
Per puro caso, per sbaglio ho chiuso manualmente la form frmRegistro (da cui richiamo la form multiuso frmElenco01) lasciando quindi aperta la sola frmElenco01. Non ci ho fatto caso, ed ho selezionato una voce dalla combo di frmElenco01. In questo caso la voce è stata correttamente selezionata (il menu a tendina si è chiuso), il suo valore assegnato con OK alla variabile globale (Case 3) e una volta chiusa frmElenco01 la funzione è uscita dal loop continuando regolarmente.
Quindi ne deduco che il problema non è nel codice o nella query o altro, ma solo nel fatto che ci sia la form frmRegistro aperta? ma se è così, perchè?
O c'è qualcosa che non ve nel loop?
Do
DoEvents
If CurrentProject.AllForms("frmElenco01").IsLoaded = False Then
Exit Do
End If
Loop