Notifications
Clear all

Encadeamento de 3 Combobox

11 Posts
2 Usuários
0 Reactions
2,780 Visualizações
(@paulitotavares)
Posts: 36
Trusted Member
Topic starter
 

Boa noite, estou com um pequeno problema, tenho que encadear 3 ComboBox, a 1ª e a 2ª está tudo bem, mas a 3ª não funciona.
Será que poedriam analisar o código abaixo e dizer-me como corrigir esta situação.

'Private Sub ComboBoxProdutos_Change()
' Call CarregaSeccoes(Me.ComboBoxProdutos(Me.ComboBoxProdutos.ListIndex))
'End Sub
Private Sub ComboBoxCategorias_Change()
Call CarregaProdutos(Me.ComboBoxCategorias.List(Me.ComboBoxCategorias.ListIndex))
End Sub

Private Sub ComboBoxSeccoes_Change()

End Sub

Private Sub UserForm_Initialize()
Call CarregaCategorias
End Sub

Private Sub CarregaCategorias()
Dim linha As Integer, coluna As Integer
linha = 2
coluna = 1
Me.ComboBoxCategorias.Clear
With Sheets("Categorias")
Do While Not IsEmpty(.Cells(linha, coluna))
Me.ComboBoxCategorias.AddItem .Cells(linha, coluna).Value
linha = linha + 1
Loop
End With
End Sub

Private Sub CarregaProdutos(ByVal Categoria As String)
Dim linha As Integer, colunaProduto As Integer, colunaCategoria As Integer
linha = 2
colunaProduto = 1
colunaCategoria = 2
Me.ComboBoxProdutos.Clear
With Sheets("Produtos")
Do While Not IsEmpty(.Cells(linha, colunaProduto))
If .Cells(linha, colunaCategoria).Value = Categoria Then
Me.ComboBoxProdutos.AddItem .Cells(linha, colunaProduto).Value
End If
linha = linha + 1
Loop
End With
End Sub

Private Sub CarregaSeccoes(ByVal Produto As String)
Dim linha As Integer, colunaSeccao As Integer, colunaProduto As Integer
linha = 2
colunaSeccao = 1
colunaProduto = 2
Me.ComboBoxSeccoes.Clear
With Sheets("Seccoes")
Do While Not IsEmpty(.Cells(linha, colunaSeccao))
If .Cells(linha, colunaProduto).Value = Produto Then
Me.ComboBoxSeccoes.AddItem .Cells(linha, colunaSeccao).Value
End If
linha = linha + 1
Loop
End With
End Sub

 
Postado : 22/10/2012 1:10 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Aparentemente é porque a rotina que "chama" o carregamento do combo Seccoes está desabilitado,
" 'Private Sub ComboBoxProdutos_Change()
' Call CarregaSeccoes(Me.ComboBoxProdutos(Me.ComboBoxProdutos.ListIndex))
'End Sub"
habilite-o (retire o " ' " do inicio da linha) e veja se funciona. caso não poste seu exemplo para que possamos analiza-lo mais faiclmente.

 
Postado : 22/10/2012 2:17 pm
(@paulitotavares)
Posts: 36
Trusted Member
Topic starter
 

Envio o ficheiro em anexo.
Ainda está em fase de iniciação, mas com a vossa ajuda hei-de lá chegar.

Já me estava a esquecer, eu já tinha retirado o ', mas dá erro.

 
Postado : 22/10/2012 2:40 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Paulito, dei uma olhada rapida e acredito que acertando as linhas conforme abaixo resolva :

Na Rotina : Sub lsLocalizaRegistroStudent
Desabilite as instruções que estão carregando os Combos ao inicializar o Form conforme abaixo :
'.ComboBoxProdutos = Sheets("Dados").Cells(lLinha, 8).Value
'.ComboBoxSeccoes = Sheets("Dados").Cells(lLinha, 9).Value

No Formulário Habilite a o Evento do ComboBoxProdutos e altere conforme a linha abaixo, faltou a propriedade List antes :

Private Sub ComboBoxProdutos_Change()
       ' Call CarregaSeccoes(Me.ComboBoxProdutos(Me.ComboBoxProdutos.ListIndex))
       Call CarregaSeccoes(Me.ComboBoxProdutos.List(Me.ComboBoxProdutos.ListIndex))
End Sub

Faça as alterações e teste para ver se é isto, lembrando que devemos tomar cuidado quando colocamos instruções para alimentar algum controle no Inicializar do Form e depois utilizamos o Evento Change para estes controles, uma vez que ao preenche-lo é acionado este evento.

No forum abaixo tem alguns exemplos de Combos dependentes, de uma olhada :
combobox encadeado com numeros
http://www.tomasvasquez.com.br/forum/vi ... eado#p6712

Descobrir valor selecionado em ComboBox
http://www.tomasvasquez.com.br/forum/vi ... IXmNG_A9-I

Espero que ajude.

[]s

 
Postado : 22/10/2012 6:37 pm
(@paulitotavares)
Posts: 36
Trusted Member
Topic starter
 

Bom dia

Agora consigo introduzir todos os itens, mas depois de guardar se quiser alterar dá-me erro 381, no seguinte código:

Private Sub ComboBoxProdutos_Change()
--> Call CarregaSeccoes(Me.ComboBoxProdutos.List(Me.ComboBoxProdutos.ListIndex))
End Sub

Se quiser introduzir um novo dá-me também o erro 381, mas no seguinte código:
Private Sub ComboBoxCategorias_Change()
--> Call CarregaProdutos(Me.ComboBoxCategorias.List(Me.ComboBoxCategorias.ListIndex))
End Sub

Abraço

 
Postado : 23/10/2012 6:19 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Segue com algumas alterações, veja se está funcional

 
Postado : 23/10/2012 10:40 am
(@paulitotavares)
Posts: 36
Trusted Member
Topic starter
 

Quero agradecer por esta ajuda, vou continuar a desenvolver esta base, e espero poder voltar a contar sempre com a vossa ajuda.

Cumprimentos

 
Postado : 23/10/2012 11:28 am
(@paulitotavares)
Posts: 36
Trusted Member
Topic starter
 

Boa tarde

Necessito mais uma vez da vossa ajuda.

Tenho que Criar três ComboBox encadeadas, para a localização.

Distrito - ComboBox1 - os dados terminam em xx"0001";
Concelho - ComboBox2 - os dados terminam em xxxx"00";
Freguesias são todos os outros

Queria que na primeira aparecessem apenas os Distritos, na segunda os seu Concelhos respectivos, e por fim as freguesias.

Será possível??

Os dados estão na folha Cod_Freguesias

Cumprimentos

 
Postado : 30/10/2012 9:37 am
(@paulitotavares)
Posts: 36
Trusted Member
Topic starter
 

Alterei o ficheiro, os dados estão na folha Freguesias.

Tentei de tudo, mas não aparece nada nas combobox.

Não percebo, tentei fazer a mesma coisa que para as outras 3 combobox, mas nada.

 
Postado : 30/10/2012 6:04 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Veja se é o que espera

 
Postado : 01/11/2012 1:07 pm
(@paulitotavares)
Posts: 36
Trusted Member
Topic starter
 

Parece que sim, ´mais uma vez obrigado pela ajuda.

Ainda tenho mais uma dúvida, mas vou tentar resolver durante o fim de semana.
Se depois não conseguir eu falo.

Abraço

 
Postado : 03/11/2012 2:09 pm