Visualizzare da VBA, l'ultima voce di una combo

di il
6 risposte

Visualizzare da VBA, l'ultima voce di una combo

Buongiorno a tutti.

Il mio problema di oggi è quello di :

al caricamento di una maschera, quello di impostare e visualizzare immediatamente e automaticamente, l'ultimo valore della lista che la mia combo box ha come origine dati  (ciò allo scopo di farlo utilizzare subito dal primo requery).

Si può pensare che è cosa banale e immediata ma in realtà non mi viene facile. Posso avere una mano su ciò.

Grazie 

antonio

6 Risposte

  • Re: Visualizzare da VBA, l'ultima voce di una combo

    20/05/2025 - antocuomo ha scritto:

    impostare e visualizzare immediatamente e automaticamente, l'ultimo valore della lista che la mia combo box ha come origine

    Che succede se imposti come Valore predefinito: DLast("*";"TuaQueryCombo")

  • Re: Visualizzare da VBA, l'ultima voce di una combo

    Non va, Osvaldo, non se ne accorge neppure.

    Ti dico che ho già provato su evento caricamento della maschera a forzare con 

        Me!Evento_Rif = Me!Evento_Rif.ItemData(2)

    Sebbene la combo si posizionasse correttamente sull'elemento "2", non ha però efficacia.

    Ciò probabilmente perché quando la modifica è avvenuta, la combo non aveva lo stato attivo.

  • Re: Visualizzare da VBA, l'ultima voce di una combo

    Ci sono probabilmente più metodi.... questo è quello più semplice:

    Private Sub Form_Load()
    	Me.NomeCasellaCombinata = Me.NomeCasellaCombinata.ItemData(Me.NomeCasellaCombinata.ListCount - 1)
    End Sub

    Cosa intendi con "non ha efficacia"...?

    Di sicuro non vengono scatenati gli eventi AfterUpdate, che devi inserire nel codice.... e se vuoi il Focus dei darglielo... 

  • Re: Visualizzare da VBA, l'ultima voce di una combo

    Giusto @Alex

    ma se non dovesse funzionare in quanto la combobox non è ancora caricata, può accadere nei casi in cui gli Items vengono caricati da un recordset esterno e/o filtrati, etc... allora si può pensare di utilizzare l'evento Current o Activate, condizionando l'operazione che avvenga solo una volta, Dipende dai vari scenari.
    Esempio:

    Private Sub Form_Activate()
        Static boolFirst As Boolean
        If Not boolFirst Then
            With Me.MyComboBox
                .Requery     ' if necessary to execute requery
                If .ListCount > 0 Then .Value = .ItemData(.ListCount - 1)
            End With
            boolFirst = True
        End If
    End Sub

    Ma se la Form è di tipo Popup non va bene.... e allora è bene utilizzare l'evento Current 

    Esempio:

    Private Sub Form_Current()
        Static boolFirst As Boolean
        If Not boolFirst Then
            With Me.MyComboBox
                .Requery     ' if necessary to execute requery
                If .ListCount > 0 Then .Value = .ItemData(.ListCount - 1)
            End With
            boolFirst = True
        End If
    End Sub
  • Re: Visualizzare da VBA, l'ultima voce di una combo

    20/05/2025 - antocuomo ha scritto:

    Ti dico che ho già provato su evento caricamento della maschera a forzare con 

        Me!Evento_Rif = Me!Evento_Rif.ItemData(2)

    Ciao, 

    devi prima di tutto essere sicuro che la ComboBox sia completamente caricata in fase di Open Form o Load Form.

    In questi casi può funzionare correttamente solo se gli Items sono Statici... quindi non caricati da un recordset e/o filtrati, etc...

    Quindi dipende tutto dalla natura della ComboBox e sarà necessario adottare tecniche diverse operando su eventi che si scatenano solo quando la Form e i Controlli sono stati caricati completamente.
    Diversamente si hanno risultati imprevedibili e/o inattendibili.

  • Re: Visualizzare da VBA, l'ultima voce di una combo

    20/05/2025 - antocuomo ha scritto:

    Ciò probabilmente perché quando la modifica è avvenuta, la combo non aveva lo stato attivo.

    Questo, come accennato da @Alex, non ha senso. 

    Poi il  "probabilmente",  nella programmazione, non esiste proprio... o è Bianco o è Nero.   ;-)   
    o è True or False ... non esiste lo stato un pò False o un pochettino True ;-))

    Comunque in questi casi il Focus non c'entra nulla.

Devi accedere o registrarti per scrivere nel forum
6 risposte