Notifications
Clear all

Combobox dependente de outra - Atualizar automaticamente

4 Posts
3 Usuários
0 Reactions
1,713 Visualizações
(@rodrigombc)
Posts: 8
Active Member
Topic starter
 

Bom dia a todos.

Estou com dificuldades numa coisa que parece ser simples mas eu sou um pouco leigo ainda no VBA... Mas vamos lá:

Tenho uma macro de cadastro de itens. Nela, tenho duas combobox dependentes umas da outra. A ideia é que, se na 1ª eu escolho "NS", a segunda puxe uma lista x, mas se eu escolher na 1ª combobox a opção "SS" ao invés, a segunda combobox puxe a lista y.

Meu código já está fazendo isso. O único problema é que ele faz isso uma vez só, ou seja, se eu clicar em NS, ele puxa a lista certa, mas se eu sem querer cliquei no NS mas na verdade queria o SS, essa segunda combobox não é atualizada a não ser que eu saia da macro, e volte de novo.

A minha ideia é deixar bem amarrado, de forma que se o usuário errou, ele consiga selecionar a outra opção e ter de imediato a nova lista, sem que o usuário tenha que sair do formulário e ter que entrar de novo.

Desde já, muito obrigado. Segue planilha em anexo e o código:

Private Sub ComboBox2_Change()

End Sub

Private Sub ComboBox3_Change()
If ComboBox3.Value = "NS" Then
For k = 1 To 1000
    
    EquipamentoNS = Plan2.Cells(k, 2).Value
    
    If EquipamentoNS = "" Then
    GoTo Fim2
    End If
    
    UserForm1.ComboBox2.AddItem EquipamentoNS

Fim2:
    
    Next k

Else
For k = 1 To 1000
    
    EquipamentoSS = Plan2.Cells(k, 3).Value
    
    If EquipamentoSS = "" Then
    GoTo Fim3
    End If
    
    UserForm1.ComboBox2.AddItem EquipamentoSS

Fim3:
    
    Next k
   End If
End Sub

Private Sub CommandButton1_Click()
Dim ultimalinha As Object

Set ultimalinha = Plan1.Range("A100").End(xlUp)

ultimalinha.Offset(1, 0).Value = CDate(TextBox1.Text)
ultimalinha.Offset(1, 1).Value = ComboBox1.Text
ultimalinha.Offset(1, 2).Value = CDbl(TextBox3.Text)
ultimalinha.Offset(1, 3).Value = ComboBox2.Text

MsgBox "Registro Inserido/Data Received", 6, "Inserir/Insert"

resposta = MsgBox("Deseja inserir outro registro", 36, "Ocyan")

If resposta = vbYes Then
TextBox1.Text = ""
ComboBox1.Text = ""
TextBox3.Text = ""
ComboBox2.Text = ""

TextBox1.SetFocus

Else
Unload Me
End If


End Sub

Private Sub CommandButton2_Click()
End
End Sub


Private Sub UserForm_Initialize()

'Me.ComboBox1.List = Application.WorksheetFunction.Transpose(Plan2.Range("A1:A8"))

Dim Gas, Sonda, EquipamentoNS, EquipamentoSS As String
    
    For i = 1 To 1000
        
    Gas = Plan2.Cells(i, 1).Value
      
    If Gas = "" Then
    GoTo Fim
    End If
                        
    UserForm1.ComboBox1.AddItem Gas
    
Fim:

    Next i
    
    For j = 1 To 1000
    
    Sonda = Plan2.Cells(j, 4).Value
    
    If Sonda = "" Then
    GoTo Fim1
    End If
    
    UserForm1.ComboBox3.AddItem Sonda
    
Fim1:
    Next j
       
End Sub
 
Postado : 28/02/2018 5:18 am
gfranco
(@wzxnet7)
Posts: 653
Honorable Member
 

Bom dia.
Basta adicionar a limpeza da combobox antes de rodar o laço como segue:

Private Sub ComboBox3_Change()
If ComboBox3.Value = "NS" Then
Me.ComboBox2.Clear [size=150]'<-----[/size]
For k = 1 To 1000
    
    EquipamentoNS = Plan2.Cells(k, 2).Value
    
    If EquipamentoNS = "" Then
    GoTo Fim2
    End If
    
    UserForm1.ComboBox2.AddItem EquipamentoNS

Fim2:
    
    Next k

Else
Me.ComboBox2.Clear [size=150]'<----------[/size]
For k = 1 To 1000
    
    EquipamentoSS = Plan2.Cells(k, 3).Value
    
    If EquipamentoSS = "" Then
    GoTo Fim3
    End If
    
    UserForm1.ComboBox2.AddItem EquipamentoSS

Fim3:
    
    Next k
   End If
End Sub

Resposta útil? Clique na mãozinha ao lado do botão Citar.

 
Postado : 28/02/2018 7:51 am
(@rodrigombc)
Posts: 8
Active Member
Topic starter
 

Muito obrigado meu caro!!! ME salvou! Abraços

 
Postado : 28/02/2018 12:06 pm
(@arielsilva)
Posts: 1
New Member
 

Meu Deus, to começando agora. To assustado kkkk

 
Postado : 28/02/2018 12:57 pm