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

Encadeamento de combobox e pesquisa por palavras

Fórum para dúvidas sobre os fundamentos da linguagem de programação Visual Basic no contexto do VBA
CH7
Colaborador
Colaborador
Mensagens: 12
Registrado em: Qui Jan 31, 2019 12:13 pm

Encadeamento de combobox e pesquisa por palavras

Mensagem por CH7 »

Boa tarde pessoal :D ,

Gostei muito desse fórum e já me ajudaram bastante, hoje decidi voltar pois não estou conseguindo realizar algumas coisas no meu projeto.

Então, eu preciso de ajuda no encadeamento de combobox, estarei mandando um projeto que o LaerteB(colaborador) ajudou a fazer, o meu agora está bem diferente, mas irei mandar o primeiro de todos que é o de teste.

O problema é que eu quero clicar no grupo utilities que já está todo feito no projeto e depois refinar ainda mais clicando no combobox com os nomes, este é o primeiro problema, no Anexo há mais detalhes.

O segundo problema é o botão pesquisar, eu queria uma pesquisa em "tempo real", ao ir digitando algo no input, já ir aparecendo as informações.

Anexo abaixo com mais informações, se estiver faltando alguma informação me avisem,
Obrigado pela atenção.
Anexos
Modelo.zip
(460.11 KiB) Baixado 199 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.


Avatar do usuário
LaerteB
Colaborador
Colaborador
Mensagens: 96
Registrado em: Qui Out 19, 2017 8:20 am

Re: Encadeamento de combobox e pesquisa por palavras

Mensagem por LaerteB »

Boa tarde, CH7

Anexei o arquivo exemplo que colocou, mas modificado de acordo com o
que tu questionou, espero que seja isso que queria ;)..

Então vamos em partes:

Em relação a primeira questão, clicando no combobox "Nomes" e escolhendo
um nome será apresentado no Listview1 todos que contenham aquele nome,
referente ao "Item" selecionado no Combobox1.. um adendo eu coloquei de
"quebra" um código que retira os nomes repetidos no combobox2 ok...

Agora em relação a segunda questão, do inputbox, a função que citou não
é relacionada ao inputbox; desta forma criei um novo combobox
"Pesquisa dentro do Grupo ITENS" que fará o que pediu.. clicando em um
dos Itens no combobox "ITENS" abrirá o combobox3 e quando clicar em outro
Combobox este irá ficar invisível..

No Combobox3 quando digitando a palavra ele irá aparecendo no ListView1.. :)

Agora quando quer pesquisar uma palavra sem ter escolhido algum "Item" no
combobox1 é só clicar no Botão "Pesquisar por Palavra" :)

Espero que seja isto, qualquer coisa estamos aqui ;)

Aguardando sua resposta e seu Feed Back ... se foi útil, coloque um smille :) ...

LaerteB :)
Anexos
Modelo_Solucao1.zip
(29.29 KiB) Baixado 181 vezes


CH7
Colaborador
Colaborador
Mensagens: 12
Registrado em: Qui Jan 31, 2019 12:13 pm

Re: Encadeamento de combobox e pesquisa por palavras

Mensagem por CH7 »

LaerteB escreveu: Dom Fev 17, 2019 6:06 pm Boa tarde, CH7

Anexei o arquivo exemplo que colocou, mas modificado de acordo com o
que tu questionou, espero que seja isso que queria ;)..

Então vamos em partes:

Em relação a primeira questão, clicando no combobox "Nomes" e escolhendo
um nome será apresentado no Listview1 todos que contenham aquele nome,
referente ao "Item" selecionado no Combobox1.. um adendo eu coloquei de
"quebra" um código que retira os nomes repetidos no combobox2 ok...

Agora em relação a segunda questão, do inputbox, a função que citou não
é relacionada ao inputbox; desta forma criei um novo combobox
"Pesquisa dentro do Grupo ITENS" que fará o que pediu.. clicando em um
dos Itens no combobox "ITENS" abrirá o combobox3 e quando clicar em outro
Combobox este irá ficar invisível..

No Combobox3 quando digitando a palavra ele irá aparecendo no ListView1.. :)

Agora quando quer pesquisar uma palavra sem ter escolhido algum "Item" no
combobox1 é só clicar no Botão "Pesquisar por Palavra" :)

Espero que seja isto, qualquer coisa estamos aqui ;)

Aguardando sua resposta e seu Feed Back ... se foi útil, coloque um smille :) ...

LaerteB :)
Bom dia, LaerteB.

Está muito bom mesmo, só tem uma pequena modificação que não estou conseguindo fazer, o meu original é um pouco diferente, esses nomes são grupos já definidos pelo combobox2 na verdade, me desculpe pelo engano eu tinha esquecido de especificar :|
Exemplo: O grupo "P Nome" contém os nomes "joao e "andre" e o grupo "S Nome" contém "renata" e "vitor".

Desculpe por essa falta de atenção está tudo corrido aqui, mas ficou muito bom, Obrigado mesmo :D


Avatar do usuário
LaerteB
Colaborador
Colaborador
Mensagens: 96
Registrado em: Qui Out 19, 2017 8:20 am

Re: Encadeamento de combobox e pesquisa por palavras

Mensagem por LaerteB »

Boa tarde, CH7

Primeiro por gentileza, não clicar no botão do lado direito em cima - em "Responder com Citação",
pois só usamos em casos específicos e ainda só um pequeno trecho (um exemplo quando há várias
respostas de outros integrantes e você quer responder a de um deles)... para não ficar muito
congestionado o Tópico e por não haver necessidade neste aqui ;) :) ... use o Botão "
Editor Completo" na parte de baixo do Tópico.. ok ;) ..

Eu entendo a sua correria, eu também :| ... e não tem problema o seu equivoco, com isso
podemos aprender mais :P ..

Se eu entendi o que tu pedistes agora na última resposta, já existe os nomes específicos para
cada grupo "ITENS"; desta forma substitua o código inteiro do "Private Sub ComboBox1_Change()"
por esse que estou disponibilizando abaixo:

Código: Selecionar todos

Private Sub ComboBox1_Change()

 ComboBox2.Clear


      If ComboBox1.Value = "Utilities" Then
         ComboBox2.AddItem ("joao")
         ComboBox2.AddItem ("andre")
       
       End If

  If ComboBox1.Value = "Utilities2" Then
         ComboBox2.AddItem ("renata")
         ComboBox2.AddItem ("vitor")
       
       End If
  
'*******************************************
If ComboBox1.Value = Empty Then
  ComboBox3.Visible = False
  Label3.Visible = False
  
Else
  ComboBox3.Visible = True
  Label3.Visible = True
  
End If

'*******************************************
'*******************************************
If ComboBox1.Value = "Utilities" Then
ComboBox3.Clear
ComboBox3.AddItem ("Skill")
ComboBox3.AddItem ("Montagem")

ElseIf ComboBox1.Value = "Utilities2" Then
ComboBox3.Clear
ComboBox3.AddItem ("Folha")
ComboBox3.AddItem ("Carta")

End If
'********************************************
End Sub
Agora é só adequar ao seu projeto com os nomes reais OK.. ;)

Espero que seja isto, qualquer coisa estamos por aqui.. :)

Aguardando sua resposta e seu Feed Back ... se foi útil, coloque um smille :) ...

LaerteB :)


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.


CH7
Colaborador
Colaborador
Mensagens: 12
Registrado em: Qui Jan 31, 2019 12:13 pm

Re: Encadeamento de combobox e pesquisa por palavras

Mensagem por CH7 »

Boa tarde,
Então, é quase isso ai, o detalhe é que as pessoas também estão em um grupo, Tipo: "joao" e "andre" estão no grupo "Pessoas 1", "renata" e "vitor" no grupo "Pessoas 2"
Exemplo na print abaixo.

Não estou conseguindo fazer esse segundo filtro para o encadeamento.
Anexos
Print.png
Print.png (70.25 KiB) Exibido 5464 vezes


Avatar do usuário
LaerteB
Colaborador
Colaborador
Mensagens: 96
Registrado em: Qui Out 19, 2017 8:20 am

Re: Encadeamento de combobox e pesquisa por palavras

Mensagem por LaerteB »

Boa tarde, CH7

Olha estou confuso :? , mas vamos ver se é isso que quer...
no código que coloquei acima é só trocar os nomes por
Pessoas 1 e Pessoas2 (se tiveres mais é ir só adicionando)..

Então quando clicar no Pessoas 1 aparecerá na ListView1
todos os nomes tipo "joao" e "andre"(referente ao Item Utilities),
quando clicar no Pessoas 2 aparecerá todos os nomes "renata" e "vitor"
na ListView1(referente ao Item Utilities2) é isso???

Se for isso é só substituir este código do "Sub Listview1ADDCombo2()"
que se encontra no módulo2 pelo código de baixo que estou
disponibilizando:

Código: Selecionar todos

Sub Listview1ADDCombo2()

 Dim linh As Integer
 Dim p2 As Variant
 Dim p3 As Variant
 Dim p4 As Variant
 Dim p5 As Variant
 Dim p6 As Variant
 Dim p7 As Variant

 linh = 3

 UserForm1.ListView1.ListItems.Clear

     With Worksheets(1).Range("W:W")
      Set p2 = .Find("skill", LookIn:=xlValues, LookAt:=xlWhole)
      Set p3 = .Find("montagem", LookIn:=xlValues, LookAt:=xlWhole)
      Set p4 = .Find("folha", LookIn:=xlValues, LookAt:=xlWhole)
      Set p5 = .Find("carta", LookIn:=xlValues, LookAt:=xlWhole)
      
     With Worksheets(1).Range("E:E")
      Set p6 = .Find("joao", LookIn:=xlValues, LookAt:=xlWhole)
      Set p7 = .Find("andre", LookIn:=xlValues, LookAt:=xlWhole)
      Set p8 = .Find("renata", LookIn:=xlValues, LookAt:=xlWhole)
      Set p9 = .Find("vitor", LookIn:=xlValues, LookAt:=xlWhole)

    Do Until Worksheets(1).Cells(linh, 1) = ""

      If UserForm1.ComboBox1.Value = "Utilities" And UserForm1.ComboBox2.Value = "Pessoas 1" Then
       If Worksheets(1).Cells(linh, 5) = p6 Or Worksheets(1).Cells(linh, 5) = p7 Then
        If Worksheets(1).Cells(linh, 23) = p2 Or Worksheets(1).Cells(linh, 23) = p3 Then

      Set Lt = UserForm1.ListView1.ListItems.Add(Text:=Cells(linh, "a").Value)

       Lt.ListSubItems.Add Text:=Cells(linh, "b").Value
       Lt.ListSubItems.Add Text:=Cells(linh, "c").Value
       Lt.ListSubItems.Add Text:=Cells(linh, "d").Value
       Lt.ListSubItems.Add Text:=Cells(linh, "e").Value
       Lt.ListSubItems.Add Text:=Cells(linh, "f").Value
       Lt.ListSubItems.Add Text:=Cells(linh, "g").Value
       Lt.ListSubItems.Add Text:=Cells(linh, "h").Value
       Lt.ListSubItems.Add Text:=Cells(linh, "i").Value
       Lt.ListSubItems.Add Text:=Cells(linh, "j").Value
       Lt.ListSubItems.Add Text:=Cells(linh, "k").Value
       Lt.ListSubItems.Add Text:=Cells(linh, "l").Value
       Lt.ListSubItems.Add Text:=Cells(linh, "m").Value
       Lt.ListSubItems.Add Text:=Cells(linh, "n").Value
       Lt.ListSubItems.Add Text:=Cells(linh, "o").Value
       Lt.ListSubItems.Add Text:=Cells(linh, "p").Value
       Lt.ListSubItems.Add Text:=Cells(linh, "q").Value
       Lt.ListSubItems.Add Text:=Cells(linh, "r").Value
       Lt.ListSubItems.Add Text:=Cells(linh, "s").Value
       Lt.ListSubItems.Add Text:=Cells(linh, "t").Value
       Lt.ListSubItems.Add Text:=Cells(linh, "u").Value
       Lt.ListSubItems.Add Text:=Cells(linh, "v").Value
       Lt.ListSubItems.Add Text:=Cells(linh, "w").Value
       
       End If
       End If
       End If
       
       If UserForm1.ComboBox1.Value = "Utilities2" And UserForm1.ComboBox2.Value = "Pessoas 2" Then
       If Worksheets(1).Cells(linh, 5) = p8 Or Worksheets(1).Cells(linh, 5) = p9 Then
        If Worksheets(1).Cells(linh, 23) = p4 Or Worksheets(1).Cells(linh, 23) = p5 Then

      Set Lt = UserForm1.ListView1.ListItems.Add(Text:=Cells(linh, "a").Value)

       Lt.ListSubItems.Add Text:=Cells(linh, "b").Value
       Lt.ListSubItems.Add Text:=Cells(linh, "c").Value
       Lt.ListSubItems.Add Text:=Cells(linh, "d").Value
       Lt.ListSubItems.Add Text:=Cells(linh, "e").Value
       Lt.ListSubItems.Add Text:=Cells(linh, "f").Value
       Lt.ListSubItems.Add Text:=Cells(linh, "g").Value
       Lt.ListSubItems.Add Text:=Cells(linh, "h").Value
       Lt.ListSubItems.Add Text:=Cells(linh, "i").Value
       Lt.ListSubItems.Add Text:=Cells(linh, "j").Value
       Lt.ListSubItems.Add Text:=Cells(linh, "k").Value
       Lt.ListSubItems.Add Text:=Cells(linh, "l").Value
       Lt.ListSubItems.Add Text:=Cells(linh, "m").Value
       Lt.ListSubItems.Add Text:=Cells(linh, "n").Value
       Lt.ListSubItems.Add Text:=Cells(linh, "o").Value
       Lt.ListSubItems.Add Text:=Cells(linh, "p").Value
       Lt.ListSubItems.Add Text:=Cells(linh, "q").Value
       Lt.ListSubItems.Add Text:=Cells(linh, "r").Value
       Lt.ListSubItems.Add Text:=Cells(linh, "s").Value
       Lt.ListSubItems.Add Text:=Cells(linh, "t").Value
       Lt.ListSubItems.Add Text:=Cells(linh, "u").Value
       Lt.ListSubItems.Add Text:=Cells(linh, "v").Value
       Lt.ListSubItems.Add Text:=Cells(linh, "w").Value
     
       
       End If
       End If
       End If
       
   linh = linh + 1
   
   Loop
   
   End With
   End With
   
  Set Lt = Nothing
  Set p2 = Nothing
  Set p3 = Nothing
  Set p4 = Nothing
  Set p5 = Nothing
  Set p6 = Nothing
  Set p7 = Nothing
  Set p8 = Nothing
  Set p9 = Nothing


End Sub
Mas se for colocar no Grupo "Nomes" 2 ou mais itens relacionado a cada "Item" do
Grupo "ITENS" é só modificar o "Private Sub ComboBox1_Change()" adicionando
de acordo com cada Grupo ok...

Não esquecendo de alterar e acrescentar em cada linha do código acima
"If UserForm1.ComboBox1.Value = "Utilities" And (aqui adicionar os itens
do Grupo "Nomes")..."

Caso não seja bem isso e quer colocar mais um Combobox com os nomes, daí
é só seguir o esquema que fizemos até agora, blz :)...

Verifique e veja se está de acordo com que queria, se precisar de algo
estamos aqui... não esqueça de explicar melhor com mais ilustrações
e como cada processo chega ao seu objetivo, pois ficou confuso e não
sei se entendi o que tu queria passar..

Aguardando sua resposta e seu Feed Back ... se foi útil, coloque um smille :) ...

LaerteB :)


CH7
Colaborador
Colaborador
Mensagens: 12
Registrado em: Qui Jan 31, 2019 12:13 pm

Re: Encadeamento de combobox e pesquisa por palavras

Mensagem por CH7 »

Boa tarde, LaerteB.

Me desculpa por ter bugado sua cabeça kkk e muito obrigado pelas ajudas, no final eu percebi que eu tinha feito tudo certo, só tinha esquecido de chamar a função :|

Mas então, agora surgiu duas duvidas.
Primeira, que na hora que eu fosse escolher o grupo do combobox2 aparece-se todos funcionando certinho e sem repetir estrutura para o código não ficar pesado, a imagem estará mais explicativa.

Segunda, na hora de ir digitando as palavras no combobox3 eu queria que não precisa-se escrever a palavra inteira, ao ir digitando ela já iria atualizando para as palavras semelhantes, Exemplo: Palavras "Jogos" e "Joao", ao escrever "jo" já iria aparecendo as palavras semelhantes.
Anexos
Duvida1.zip
(147.8 KiB) Baixado 186 vezes


Avatar do usuário
LaerteB
Colaborador
Colaborador
Mensagens: 96
Registrado em: Qui Out 19, 2017 8:20 am

Re: Encadeamento de combobox e pesquisa por palavras

Mensagem por LaerteB »

Bom dia, CH7

Para a segunda dúvida você pode adicionar (o código abaixo) dentro do
"Private Sub ComboBox3_Change()" , depois do "Call Listview1ADDCombo3" :

Código: Selecionar todos

 If ComboBox3.ListCount = 0 Then Exit Sub

 If comboBox3.Text = "" Then
     Application.SendKeys ("{ESC}")

   Else
     ComboBox3.DropDown
  End If
Agora em relação a primeira dúvida, ainda estou verificando se há
possibilidades de ser executado como quer.. como estou um pouco
atolado, neste final de semana estarei vendo melhor ok :)...

Espero que este código acima resolva a 2ª dúvida, qualquer coisa
estamos aqui... :D

Aguardando sua resposta e seu Feed Back ... se foi útil, coloque um smille :D ...

LaerteB :)


CH7
Colaborador
Colaborador
Mensagens: 12
Registrado em: Qui Jan 31, 2019 12:13 pm

Re: Encadeamento de combobox e pesquisa por palavras

Mensagem por CH7 »

Bom dia, LaerteB.

Eu imagino a correria, estou na mesma, mas fica tranquilo, faça no seu tempo ai, o que importa é que você está tentando e está ajudando, agradeço muito por essas ajudas. ;) :D

Me ajudou bastante sim na segunda duvida, eu tenho outra em cima da segunda também, além do combobox, eu tenho uma textbox e eu quero que ela faça a mesma coisa, só que eu não consegui fazer ela funcionar modificando algumas coisas, tirei o "listcount" e coloquei o "linecount" entre umas outras mini modificações, mas não consegui mesmo assim, como eu poderia fazer para ela ter a mesma função do combobox?

E estou esperando a resposta da primeira pergunta também. :D

Obrigado mesmo pelo empenho que você tem me ajudando. :D


Avatar do usuário
LaerteB
Colaborador
Colaborador
Mensagens: 96
Registrado em: Qui Out 19, 2017 8:20 am

Re: Encadeamento de combobox e pesquisa por palavras

Mensagem por LaerteB »

Boa tarde, CH7

Opa, legal que a 2ª dúvida foi sanada ;) ..., em relação a mesma dúvida, mas com Textbox eu
aconselho trocar este textbox por um combobox e utilizar o código que te passei.. porém se
quer mesmo utilizar o Textbox, existe um link deste Fórum que explica como fazer este
procedimento (se encontra na resposta do nosso amigo "Mikel Silveira Fraga" no segundo código
que ele disponibilizou), somente trocar alguns nomes de acordo com o seu projeto e acrescentar se
for necessário; segue o link abaixo:
viewtopic.php?t=4420

Agora para a 1ª dúvida, não achei (até este momento) uma solução que possibilite de ser executado
como quer sem ter que mudar o código por completo... em termos de desempenho este código não
apresenta lentidão, pelo fato de ter colocado em módulos para um melhor desempenho... entendo
que "visualmente" não é um dos melhores e ter que repetir é trabalhoso... se achar um jeito eu
aviso aqui blz :) ....

Verifique o link e se tiver dúvidas estamos aqui :) ..

Aguardando sua resposta e seu Feed Back ... se foi útil, coloque um smille :D ...

LaerteB :)


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