Ordine controlli su userform



  • Ordine controlli su userform
    di Lucas87 (utente non iscritto) data: 13/03/2014 11:54:43

    Ciao.
    Sono ancora qui per chiedere consigli su userform.
    Ho una situazione con 15 textbox e 2 combobox.
    Una volta compilati i vari elementi dovrei riportarli sul foglio secondo un certo ordine.

    es: textbox12-combobox1-textbox11-combobox2-textbox1-textbox2-.....-textbox10-textbox15

    Usando for each ctl in userform.controls.... posso scorrere tutti i controlli e l'ordine sembra essere quello di creazione. Ovviamente (non sapendolo prima) ho creato i controlli con un ordine diverso. Quindi vorrei sapere: è possibile cambiare questo ordine o mi tocca cancellare tutto e ripartire da zero stando attento all'ordine ?
    Ho già provato a modificare TabIndex nelle proprietà dei controlli, ma non ha funzionato.



  • di Vecchio Frac data: 13/03/2014 12:14:48

    Bè mettili in un array, nell'ordine desiderato.
     
    option explicit
    
    sub ricopia
    dim v as variant, i as integer
    
        for each v in array("textbox12", "combobox1", "textbox11")
            range("a1").offset(i) = v
            i = i + 1
        next
    end sub






  • di lepat (utente non iscritto) data: 13/03/2014 12:15:54

    puoi verificare il tipo di controllo ed il suo nome, vedi codice
     
    Private Sub a()
    For Each cCont In UserForm1.Controls
      If TypeName(cCont) = "TextBox" Then
        MsgBox cCont.Name
      End If
    Next
    End Sub
    



  • di Lucas87 data: 13/03/2014 12:55:54

    Ti bacerei....
    Grazie



  • di Lucas87 data: 13/03/2014 12:57:52

    Ops...
    Dimenticavo...vanno tolti gli apici dall'array altrimenti li vede come testo
     
    option explicit
    
    sub ricopia
    dim v as variant, i as integer
    
        For Each v In Array(TextBox2, ComboBox2, TextBox3, ComboBox1, TextBox1)
            range("a1").offset(i) = v
            i = i + 1
        next
    end sub



  • di Vecchio Frac data: 13/03/2014 16:15:04

    No, secondo me hai preso un abbaglio. Gli apici servono.
    Altrimenti ti riferisci agli oggetti stessi e allora devi specificare la proprietà desiderata:
    Range("a1").Offset(i) = v.Name





  • di Lucas87 data: 13/03/2014 16:53:14

    Si scusa. Avevo semplicemente copiato il codice.
    Nel mio caso invece serviva che venissero passati gli oggetti