nome combobox associato a variabile



  • nome combobox associato a variabile
    di JellyFish (utente non iscritto) data: 10/10/2012 11:28:24

    Ciao a tutti,

    Ho una Userform con ben 24 Combobox con gli stessi elementi. Ho inserito questo il codice che funziona ma lo devo ripetere bene 24 volte.

    Qualcuno può aiutarmi a razionalizzarlo per favore?

    Grazie in anticipo

    Jelly





     
    Private Sub UserForm_Initialize()
    
    Dim Elementi As Range
    Dim ws As Worksheet
    
    Set ws = Worksheets("Supporto livello di analisi")
    
    For Each Elementi In ws.Range("Ordine")
      With Me.ComboBox1
        .AddItem Elementi.Value
      End With
    Next Elementi
    
    For Each Elementi In ws.Range("Ordine")
      With Me.ComboBox2
        .AddItem Elementi.Value
      End With
    Next Elementi
    
    For Each Elementi In ws.Range("Ordine")
      With Me.ComboBox3
        .AddItem Elementi.Value
      End With
    Next Elementi
    



  • di Vecchio Frac data: 10/10/2012 11:54:24

    Ti propongo il massimo della razionalizzazione per efficienza e velocità, ma non vedo e non capisco l'utilità di popolare tre combobox uguali nella stessa Userform: c'è qualcosa che non ci dici ^_^
     
    Private Sub UserForm_Initialize()
    
        With Worksheets("Supporto livello di analisi").[ordine]
            ComboBox1.RowSource = .Address
            ComboBox2.RowSource = .Address
            ComboBox3.RowSource = .Address
        End With
    
    End Sub






  • di Vecchio Frac data: 10/10/2012 12:08:41

    Se vuoi renderlo più generico, perchè magari hai ventiquattro combobox nell'userform e ti rompi a scrivere ventiquattro istruzioni uguali, modificalo come sotto, ma attenzione che i nomi delle combobox devono cominciare necessariamente per "combo".
     
    Private Sub UserForm_Initialize()
    Dim combo As Object
    
        For Each combo In Me.Controls
            If LCase(Left(combo.Name, 5)) = "combo" Then
                combo.RowSource = Worksheets("Supporto livello di analisi").[ordine].Address
            End If
        Next
    
    End Sub
    






  • di Jelly (utente non iscritto) data: 10/10/2012 12:10:16

    Ciao Vecchio Frac,

    Prima di tutto grazie! Purtroppo non ne ho solo tre ma ben 24...

    Ogni Combobox deve mostrare i valori contenuti nel range di celle "Ordine" ogni scelta andrà nella sua cella distinta... come se, nella mia form, dovessi valutare 24 film con un valore da 1 a 4...

    Ho inserito il tuo codice. Ora tre delle mie 24 tendine si aprono ma non mi legge i valori.




  • di Vecchio Frac data: 10/10/2012 12:28:32

    L'ho ben immaginato che, poichè non ci mostri tutto il codice, c'è qualcos'altro da fare :)
    Anzitutto utilizza il secondo codice che ho postato, più generico e che coinvolge tutte le combobox presenti nello Userform.
    Quindi abbi cura di prelevare per ogni combobox il valore selezionato e ficcarlo nelle celle del foglio ^_^ con combobox1.List(Listindex) o qualcosa del genere (non me lo ricordo a memoria).

    Se hai tempo, prepara un piccolo file di esempio con dati fittizi e allegalo alla discussione (meglio se in formato zip o rar), così lavoriamo sul concreto.





  • di Jelly (utente non iscritto) data: 10/10/2012 14:31:49

    Grazie mille!!!

    Ho attivato il foglio dove c'era il range e ora funziona!!!

    Worksheets("Supporto livello di analisi").Activate

    Grazie ancora Vecchio Frac!!!
     
    Private Sub UserForm_Initialize()
    
    Worksheets("Supporto livello di analisi").Activate
    
    For Each combo In Me.Controls
    
        If LCase(Left(combo.Name, 5)) = "combo" Then
            combo.RowSource = Worksheets("Supporto livello di analisi").[Ordine].Address
        End If
        
    Next



  • di Jelly (utente non iscritto) data: 10/10/2012 14:33:59

    Forse avevo dimenticato il flag "Spunta se risolta"

    Ciao e grazie ancora