Vídeo recomendado
https://youtu.be/diWPPPhW-9E

ComboBox encadeado a TextBox [RESOLVIDO]

Dúvidas gerais sobre Excel
Rafa - Info
Colaborador
Colaborador
Mensagens: 24
Registrado em: Ter Nov 16, 2010 6:33 pm

ComboBox encadeado a TextBox [RESOLVIDO]

Mensagem por Rafa - Info »

Boa noite pessoal, tenho dúvida na utilização do combobox onde ele estaria ligado a um textbox, o textbox retornaria a linha correspondente do combobox. Exemplo:
Dados do combobox ficariam na plan1 coluna A (o combobox seria números) e o textbox ficaria na coluna B e já apareceria assim que que eu preenchesse o combobox, como faço este laço?

Aguardo.
Editado pela última vez por Rafa - Info em Qui Nov 18, 2010 12:13 pm, em um total de 1 vez.


Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


Avatar do usuário
Mauro Coutinho
Jedi
Jedi
Mensagens: 1561
Registrado em: Sáb Mar 13, 2010 8:10 pm
Localização: São José dos Pinhais - Pr

Re: ComboBox encadeado a TextBox

Mensagem por Mauro Coutinho »

Rafa, acredito que no Tópico abaixo tenha a solução que está querendo.

textbox exibir valor referente ao item do combobox
viewtopic.php?f=6&t=178&p=1137&hilit=COLLECTION#p1137

Temos tambem esse outro:
varios combobox encadeados
viewtopic.php?f=6&t=666

Se fizzer uma pesquisa no forum encontrara outras dicas.

[]s


Rafa - Info
Colaborador
Colaborador
Mensagens: 24
Registrado em: Ter Nov 16, 2010 6:33 pm

Re: ComboBox encadeado a TextBox

Mensagem por Rafa - Info »

Mauro, já tinha observado estes tópicos citados, o problema é justamente o Collection não reconhecer números, não sou avançado em vba, mas não consegui declarar no Collection para fazer reconhecer números, que é o meu caso. Também não consegui montar uma estrutura capaz de atribuir um laço no textbox junto com o combobox. Espero a ajuda de vocês para montar.
Aguardo.


Avatar do usuário
Mauro Coutinho
Jedi
Jedi
Mensagens: 1561
Registrado em: Sáb Mar 13, 2010 8:10 pm
Localização: São José dos Pinhais - Pr

Re: ComboBox encadeado a TextBox

Mensagem por Mauro Coutinho »

Rafa, para o Collection reconhecer números, é necessário usar uma das Funções de conversão de tipos, e neste caso seria a CStr, veja mais sobre a mesma na ajuda do VBA, ficando assim a rotina do exemplo postado pelo JoseA:

Código: Selecionar todos

Sub Empresa()
Me.ComboBox1.Clear
    Dim OCOLLECTION As New Collection
Dim VARVALUE As Variant
Dim I, ULTLINHA As Long
ULTLINHA = Plan1.Range("A65536").End(xlUp).Row
On Error Resume Next
For Each VARVALUE In Plan1.Range("A2:A" & ULTLINHA)
    'Convertemos a VARVALUE em Numero usando
    'a Funções de conversão de tipos CStr
    OCOLLECTION.Add CStr(VARVALUE), CStr(VARVALUE)
Next
For I = 1 To OCOLLECTION.Count
        ComboBox1.AddItem OCOLLECTION.Item(I)
    Next
End Sub
Para exemplificar melhor, modifiquei o exemplo do JoseA já com a conversão, de uma olhada e qualquer coisa poste novamente.

[]s
Anexos
COLLECTION_numeros.rar
Collection reconhecer números
(12.38 KiB) Baixado 668 vezes


Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


Rafa - Info
Colaborador
Colaborador
Mensagens: 24
Registrado em: Ter Nov 16, 2010 6:33 pm

Re: ComboBox encadeado a TextBox

Mensagem por Rafa - Info »

Mauro, é isso mesmo, só que eu não saberei montar por exemplo tirando os labels e o combobox2, deixando apenas as colunas A e B, respectivamente combobox1 e textbox1. Pode me ajudar a montar apenas com um combobox e um textbox recebendo direto?

Aguardo, a obrigado desde já.


Avatar do usuário
Mauro Coutinho
Jedi
Jedi
Mensagens: 1561
Registrado em: Sáb Mar 13, 2010 8:10 pm
Localização: São José dos Pinhais - Pr

Re: ComboBox encadeado a TextBox

Mensagem por Mauro Coutinho »

Rafa, não sei se chegou a reparar, essa rotina com o uso do COLLECTION, é para se preencher o ComboBox1 com os registros que estão na Coluna A sem repetição, ou seja se tivermos itens repetidos na mesma ele preenche somente com 1 registro e ao selecionarmos um item no mesmo ele preenche o Combobox2 com os registros relacionados à seleção, podendo ser mais de um. Então da maneira que quer, se tem somente as duas Colunas, e na Coluna B tiver itens repetidos, isso não surtira efeito no Textbox aonde será retornado somente um registro, mas se for isso mesmo, poderiamos estar utilizando outras rotinas mais simples.

Mas em uma adaptação meio rapidinho, antes que o serviço apure, no modelo que enviei, apague todas as rotinas referentes aos combobox, só deixando as referentes ao UserForm_Initialize e a Sub Empresa e cole a rotina abaixo, ela é responsável por retornar ao Textbox o registro referente ao combobox1, lembrando, a coluna B sem repetição.

Código: Selecionar todos

Private Sub ComboBox1_Change()
    Dim sVall As Long
    Dim linha   As Long
    
        sVall = ComboBox1.Value
        
        linha = 2
        
        While (Range("A" & linha) <> "")
            If (Range("A" & linha) = sVall) And _
            (Range("A" & linha) = sVall) Then TextBox1.Value = Range("B" & linha)
            linha = linha + 1
        Wend
End Sub
Faça os testes e qq duvida poste novamente.

[]s


Rafa - Info
Colaborador
Colaborador
Mensagens: 24
Registrado em: Ter Nov 16, 2010 6:33 pm

Re: ComboBox encadeado a TextBox

Mensagem por Rafa - Info »

Perfeito, fiz os testes aqui e funcionou. Implementei o mesmo código em uma planilha que tenho, contendo as abas Dados1 e Dados2 que é onde ficarão coluna A (Nº Filial) coluna B (Nome Cidade) porém começou a apresentar erros, então acrescentei:
em
-------------------
Option Explicit
Private Dados2 As Worksheet
-------------------------
e em
-----------------
Private Sub UserForm_Initialize()
Set Dados2 = ThisWorkbook.Worksheets("Dados2")

Não entendo o significado destas declarações mas resolveu.

Obrigado Mauro.
Sua prestabilidade é 10. Continue assim.

Se puder tirar estas dúvidas minhas só para eu entender agradeço.


Avatar do usuário
Mauro Coutinho
Jedi
Jedi
Mensagens: 1561
Registrado em: Sáb Mar 13, 2010 8:10 pm
Localização: São José dos Pinhais - Pr

Re: ComboBox encadeado a TextBox

Mensagem por Mauro Coutinho »

Rafa, como você está usando duas ABAS Dados1 e Dados2, e a chamada do Form está na ABA Dados1 e e os registros na BA Dados2, na inicialização do Form ele entende como se os registros estão na planilha Ativa ou seja a Dados1, e o que fez foi defenir e informar na rotina a Dados2 como sendo a origem dos registros, foprçando a mesma a procurar nessa ABA e não na Dados1.

Apesar de não estar utilizando a Modelo cadastro, no link abaixo tem uma e xplicação melhor sobre essas referencias, de uma lida que o ajudará a entrender melhor :

Modelo Cadastro V3 - Adaptações
viewtopic.php?f=16&t=595

E como é um assunto um pouco complexo e Longo sugiro ver nos links que postei do juliobattisti Trabalhando com o objeto Application / Workbook e Worksheet, e proveite deixe-o em seu favoritos pis é uma ótima referencia a tudo que precisar em VBA, é curso completo com 120 lições.

[]s


Rafa - Info
Colaborador
Colaborador
Mensagens: 24
Registrado em: Ter Nov 16, 2010 6:33 pm

Re: ComboBox encadeado a TextBox

Mensagem por Rafa - Info »

Mauro estava postando enquanto você estava me respondendo, vou apenas colocar abaixo o postado acima sobre o erro que está acontencendo agora.
---------------------------------------------------------------------------------------------------------------------------------------------------
Mauro, outro detalhe que percebi e começou a incomodar é quando eu apago o valor do combobox e ele já gera erro de cara, interrompendo a utilização.

Tipos incompatíveis

sVall = ComboBoxDestino.Value


Ou seja, que o comboBoxDestino não travasse a execução (retornaria erro) por valor branco ou valor errado, talvez gerasse uma msgbox, algo para não parar de funcionar.

Talvez tentar encaixar uma mensagem assim:

If ComboBoxDestino.Value = "" Then
MsgBox "Faltam dados", vbOKOnly + vbCritical, "CD094"
End If


Só uma idéia, pois tentei já fazer isso mas não para de ocorrer o erro..

Veja o código atual do combobox
-----------------------------------------------------
Private Sub ComboBoxDestino_Change()
Dim sVall As Long
Dim linha As Long

sVall = ComboBoxDestino.Value

linha = 2

While (Dados2.Range("A" & linha) <> "")
If (Dados2.Range("A" & linha) = sVall) And _
(Dados2.Range("A" & linha) = sVall) Then TextBoxDestino.Value = Dados2.Range("B" & linha)
linha = linha + 1
Wend

End Sub

---------------------------------------------------------------------------------------------------------------------------
Obrigado


Avatar do usuário
Mauro Coutinho
Jedi
Jedi
Mensagens: 1561
Registrado em: Sáb Mar 13, 2010 8:10 pm
Localização: São José dos Pinhais - Pr

Re: ComboBox encadeado a TextBox

Mensagem por Mauro Coutinho »

Rafael, supondo que em seu Combobox1 será carregado somente com NÚMEROS, então acrescente a rotina abaixo no modelo que enviei :

Limita a digitação somente de Numeros

Código: Selecionar todos

Private Sub ComboBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    'Permitir que seja deigitado apenas Números
    If KeyAscii < Asc("0") Or KeyAscii > Asc("9") Then
        KeyAscii = 0
        MsgBox "Digite Somente Numeros"
    End If
End Sub
Troque a rotina anterior por esta, assim se apagar o valor não haverá mais o erro e se digitar um Numero que não consta na lista carregada será emitida a Msg de valor não localizado.

Código: Selecionar todos

Private Sub ComboBox1_Change()
    Dim sVall As Long
    Dim linha   As Long
    Dim sLocaliza As Boolean
    
    sLocaliza = False
   
   If ComboBox1.Value = "" Then
        TextBox1 = ""
        'Sai da Rotina
        Exit Sub
    
    Else
            sVall = ComboBox1.Value
            linha = 2
            While (Range("A" & linha) <> "")
                If (Range("A" & linha) = sVall) And (Range("A" & linha) = sVall) Then
                
                TextBox1.Value = Range("B" & linha)
                    'Transforma em verdadeiro se localiado
                    sLocaliza = True
                    'Sai da rotina
                    Exit Sub
                End If
                linha = linha + 1
            Wend
    End If
    
    'Se Localizado Falso emite msg
    If sLocaliza = False Then
        MsgBox "Valor não encontrado"
        TextBox1 = ""
    End If

End Sub
[]s


Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


Responder