Forzare in ordine numerico delle caselle combinate tramite VBA

di il
32 risposte

32 Risposte - Pagina 3

  • Re: Forzare in ordine numerico delle caselle combinate tramite VBA

    Quello che dicevo a TT era questo:

    Private Function getRequery(actCombo As Access.ComboBox)
    Dim mCbo As Access.ComboBox
    Dim bRequery As Boolean
    
        For Each mCbo In mCCombo
               
               If bRequery Then
                    mCbo.Value = Null
                    mCbo.Requery
                    If mCbo.ListCount <= 1 Then mCbo = mCbo.ItemData(0)
               Else
                    bRequery = mCbo Is actCombo		' <------- essendo 2 oggetti, EquiType si possono confrontare
               End If
        'Next I
        
        Next
        Set mCbo = Nothing
        
    End Function
  • Re: Forzare in ordine numerico delle caselle combinate tramite VBA

    15/01/2026 - @Alex ha scritto:

    Quello che dicevo a TT era questo:

                    bRequery = mCbo Is actCombo		' <------- essendo 2 oggetti, EquiType si possono confrontare

    Grazie Alex che ho imparato una cosa nuova e utile, ho provato e funziona perfettamente, grazie Alex.

  • Re: Forzare in ordine numerico delle caselle combinate tramite VBA

    Ovviamente se il numero di Oggetti inseriti in Collection è basso, si può aggiungere l'utilizzo della KEY che, nonostante renda la Collection più lenta nel Ciclo For...Each(in questi casi la considerazione è inutile avendo pochi Items), ne velocizza l'estrazione del singolo Item... se serve, ma serve ragionare sul come deve essere utilizzata.

    In alcuni casi infatti è conveniente addirittura creare più collection, anche se con gli stessi Items, ed usare quella più adatta in relazione al tipo di esigenza, Velocità Estrazione/Ciclo.

    Ad esempio, l'uso della KEY in questo caso avendo pochissimi Items potrebbe essere utile:

    Option Compare Database
    Option Explicit
    
    Dim mCCombo As Collection
    
    Private Sub Form_Load()
        Set mCCombo = New Collection
        With mCCombo
            .Add Me!Combo1, Me!Combo1.Name
            .Add Me!Combo2, Me!Combo2.Name
            .Add Me!Combo3, Me!Combo3.Name
            .Add Me!Combo4, Me!Combo4.Name
        End With
    End Sub

    In questo caso l'estrazione dell'Item singolo è fattibile usando la KEY, quindi per recuperare l'oggetto chiamato "Combo1":

    Set mCBO1 As Access.Combobox
    Set mCBO1=mCCombo.Item("Combo1")

    Senza usare la KEY avremmo dovuto cilare la collection così:

    Dim mCbo As Access.Combo
    For Each mCbo In mCCombo
        If mCbo.Name="Combo1" then
        ...
        End if
    Next

    Tutti questi ragionamenti sono estremamente importanti SOLO quando si gestiscono collection corpose con diverse centinaia di oggetti, o addirittura Collection di Classi gerarchiche, nelle quali i livelli di profondità sia a salire che a scendere amplificano i tempi di accesso nelle scansioni, e si deve ottenere una velocità di iterazione o di estrazione quanto più elevata possibile.

    Quindi anche se può sembrare poco utile il tutto, se si supera questa specifica esigenza per la quale queste considerazioni sono veramente poco sensate avendo 4 Items, queste 2 particolarità della collection:

    1. Collection con KEY rapido accesso al singolo ITEM, ma minor velocità nel ciclo
    2. Collection senza KEY velocità di scansione ciclo

    rendono questo oggetto estremamente importante ed importante è il loro modo di essere usate anche insieme quando si lavora con Classi e Collection molto voluminose. 

Devi accedere o registrarti per scrivere nel forum
32 risposte