Notifications
Clear all

Populando várias combobox com a mesma listagem

4 Posts
2 Usuários
0 Reactions
526 Visualizações
(@pedrokl)
Posts: 3
Active Member
Topic starter
 

Boa tarde, eu tenho um formulário que tem 10 combobox que tem a mesma listagem.
Acontece que faço um array da listagem e coloco em ordem alfabética, já que os itens são cadastrados pelo usuário.

Desta forma eu uso uma rotina pra colocar em ordem alfabética e popular o combobox, mas eu queria coloca-la em um loop para preencher todos os combobox.
Lembrando que cada combobox tem o nome ordenado do tipo, cb_dyn1, cb_dyn2.

Não estou conseguindo referenciar os nomes no objeto, como faço?
Por favor, não sei mais o que fazer!

Private Sub cb_disciplina_Change()
   
    'Define Range do material
    Dim rangedisciplina As Range
    Set rangedisciplina = Worksheets("DISCIPLINAS").Range("A1:H20")
    
    Dim i As Integer
    Dim lim As Integer
    Dim cb_dyna As Object
    
    lim = 14
    
    For i = 2 To lim

        epi = VLookupValues(cb_disciplina.Value, rangedisciplina, i, False)
        If epi <> "" Then
            
            cb_dyna.Clear
            
            'Populando Combobox Dinamicamente
            Dim ws As Worksheet
            Dim ilinha As Integer
            Dim ulinha As Range
            Dim nlinha As Integer
            Dim vlinha As String
            
            Set ws = Worksheets("CADASTRO")
            Set ulinha = ws.Range("C6:C1000")
            nlinha = ulinha.Count
                        
            For ilinha = 6 To nlinha
                If Trim(ws.Range("C" & ilinha)) <> "" Then
                    vlinha = Trim(ws.Range("C" & ilinha).Value)
                    cb_dyna.AddItem vlinha
                End If
            Next ilinha
        
            Dim arrItems            As Variant
            Dim arrTemp             As Variant
            Dim intOuter            As Long
            Dim intInner            As Long
         
            arrItems = cb_dyna.List
         
            For intOuter = LBound(arrItems, 1) To UBound(arrItems, 1)
                For intInner = intOuter + 1 To UBound(arrItems, 1)
                    If arrItems(intOuter, 0) > arrItems(intInner, 0) Then
                        arrTemp = arrItems(intOuter, 0)
                        arrItems(intOuter, 0) = arrItems(intInner, 0)
                        arrItems(intInner, 0) = arrTemp
                    End If
                Next intInner
            Next intOuter
         
            'Limpando Combobox
            cb_dyna.Clear
            
            'Adicionando o array ordenado
            For intOuter = LBound(arrItems, 1) To UBound(arrItems, 1)
                cb_dyna.AddItem arrItems(intOuter, 0)
            Next intOuter
            
            newArrItems = cb_dyna.List
            
            cb_dyna.Visible = True
            
        End If
    Next i
        
End Sub
 
Postado : 13/02/2014 12:18 pm
(@gtsalikis)
Posts: 2373
Noble Member
 

Veja se um desses 2 códigos ajuda:

For Each combo In Me.Controls
    If Left(TypeName(combo), 6) = "cb_dyn" Then
        'seu código
    End If
Next combo

Ou esse:

Dim i as integer
For i = 1 to 10 'onde 10 é o número total de comboboxes
    'seu código, trocando os textos "cb_dyn alguma coisa" por "cb_dyn" & i
Next combo

ou esse, se for letras em vez de números:

Dim i as integer
For i = 97 to 107 'onde 107 é o número total de comboboxes - 97
    'seu código, trocando os textos "cb_dyn alguma coisa" por "cb_dyn" & i
Next combo
 
Postado : 13/02/2014 12:31 pm
(@pedrokl)
Posts: 3
Active Member
Topic starter
 

Opa! Valeu pela resposta!

Quanto a utilizar o i em '"cb_dyn" & i', não funciona, ele pede para referenciar o objeto. Se escrever cb_dyn1.clear etc... funcionar, agora '"cb_dyn" & i' já não funciona

Vou tentar o primeiro código e posto o resultado!

 
Postado : 13/02/2014 12:37 pm
(@pedrokl)
Posts: 3
Active Member
Topic starter
 

Não deu certo!

Como faço para referenciar o objeto?

Dim cb_dyna As Object
 
Postado : 13/02/2014 12:41 pm