Notifications
Clear all

combobox

4 Posts
4 Usuários
0 Reactions
1,707 Visualizações
(@keznan)
Posts: 7
Active Member
Topic starter
 

Galera, boa tarde !
Estou com um problema em combos box dependentes, e estou quebrando a cabeça pra conseguir resolver o problema.
Tenho a seguinte situação, tenho 3 combobox e eles são dependentes.
Quando seleciono na primeira combobox a opção grupo, consigo selecionar qual equipamento e proteção desejo nos combobox, porem para as opções britagem e fabrica, eu não consigo selecionar opções para os combobox de equipamento e proteção o vba me mostra que ja possuo associação para tal elemento, alguem poderia me dar uma mão ?

 
Postado : 08/01/2018 1:32 pm
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Uma possibilidade, na rotina Preenche_cbx_eqto(), altere a posição/linha -->On Error Resume Next
para logo após a posição/linha sGrupo = cbx_Grupo.Value

....
sGrupo = cbx_Grupo.Value
On Error Resume Next
....

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 08/01/2018 5:08 pm
(@rabaloco)
Posts: 5
Active Member
 

Bom dia!

Se eu entendi bem o arquivo, e sua dúvida, acho que isso resolve
Code:

Dim lastRow As Long

Private Sub cbx_eqto_Change()
    preencherProtecao cbx_Grupo.ListIndex, cbx_eqto.Value
End Sub

Private Sub cbx_Grupo_Change()
    preencherEquipamentos cbx_Grupo.ListIndex
End Sub

Private Sub UserForm_Initialize()
        
    Let lastRow = Plan1.Range(Plan1.Cells(Plan1.Rows.Count, 1).Address).End(xlUp).Row
    cbx_Grupo.List = Plan1.Range("A2:A" & lastRow).Value
End Sub

Sub preencherEquipamentos(grupo As Integer)

    Dim rng As Range
    Dim r
    Dim dic As Object
    
    Select Case grupo
        Case Is = 0: grupo = 2
        Case Is = 1: grupo = 4
        Case Is = 2: grupo = 6
    End Select
    
    Let lastRow = Plan1.Range(Plan1.Cells(Plan1.Rows.Count, grupo).Address).End(xlUp).Row
    Set rng = Plan1.Range(Plan1.Cells(2, grupo).Address, Plan1.Cells(lastRow, grupo).Address)
    Set dic = CreateObject("Scripting.Dictionary")
    
    For Each r In rng
        If Not dic.Exists(r.Value) Then
            dic.Add r.Value, dic.Count + 1
        End If
    Next
    
    With cbx_eqto
        .Clear
        .List = dic.Keys
    End With
End Sub

Sub preencherProtecao(grupo As Integer, equipamento As String)
    
    Dim rng     As Range
    Dim r
    Dim dic     As Object
    
    Select Case grupo
        Case Is = 0: grupo = 3
        Case Is = 1: grupo = 5
        Case Is = 2: grupo = 7
    End Select
    
    Let lastRow = Plan1.Range(Plan1.Cells(Plan1.Rows.Count, grupo).Address).End(xlUp).Row
    Set rng = Plan1.Range(Plan1.Cells(2, grupo).Address, Plan1.Cells(lastRow, grupo).Address)
    Set dic = CreateObject("Scripting.Dictionary")
    
    For Each r In rng
        If Not dic.Exists(r.Value) And r.Offset(0, -1).Value = equipamento Then
            dic.Add r.Value, dic.Count + 1
        End If
    Next
    
    With cbx_Protecao
        .Clear
        .List = dic.Keys
    End With

End Sub

O código acima relaciona tudo com os dados que você mostrou no exemplo, caso mude as formas, logicamente o código vai mudar tbm....espero que ajude! ;)

 
Postado : 14/07/2018 7:48 am
(@mprudencio)
Posts: 2749
Famed Member
 

Se eu entendi direito vc precisa zerar a coleção anteriormente criada.

Por isso da erro.

Veja se atende!!

Marcelo Prudencio
Microsoft Excel Brasil no Facebook

"Começar já é a metade do caminho."
Autor Desconhecido

Simplifica que simples fica.
Nicole Tomazella.

"O Simples é Sempre Melhor Que o Complicado"
Jorge Paulo Lemann.

 
Postado : 02/10/2018 12:33 pm