VBA - Código Botão ...
 
Notifications
Clear all

VBA - Código Botão Consultar

12 Posts
2 Usuários
0 Reactions
2,406 Visualizações
(@sandrolima)
Posts: 0
Estimable Member
Topic starter
 

Boa noite, colegas forumeiros.

Preciso de ajuda para escrever o código de um botão "CONSULTAR" para a situação da planilha em anexo.

Mando a planilha com as necessidades nos comentários do código.

Em resumo gostaria que:
- O código fizesse a consulta no banco de dados a partir do ID, Nome ou CPF do cliente, preenchendo as demais textbox a partir de qualquer uma dessas informações (ID, Nome ou CPF)
- Bloqueasse as demais caixas de texto ao final da consulta, liberando somente ID, Nome e CPF para nova pesquisa
- Habilitasse o botão "ALTERAR" somente caso alguma alteração fosse feita no formulário

*** IMPORTANTE """ :
- Gostaria que o "range" da pesquisa fosse restrito ao intervalo dentro da tabela e não aquele tipo de pesquisa que envolve a última linha com dados na planilha.
Ex.: o "range" da consulta seria TB_Cadastro[ID], TB_Cadastro[Nome] ou TB_Cadastro[CPF]

Tentei explicar nos comentários do código... apenas iniciei a escrita mas tive dificuldades.

Quem puder olhar já acrescentei o início da escrita do código do botão"ALTERAR" e se puderem ajudar já na escrita dele.

Obrigado

 
Postado : 05/09/2018 5:56 pm
Wagner Morel
(@wagner-morel-vidal-nobre)
Posts: 0
Illustrious Member
 

SandroLima,

Bom dia!

Veja se é assim.

Desenvolvo pequenas soluções em VBA Excel a valores que variam entre R$ 50,00 a R$ 200,00. Se te interessar, entre no meu instagran (vba_excel_desenvolvimento)

Atenciosamente
Wagner Morel

 
Postado : 06/09/2018 5:36 am
(@sandrolima)
Posts: 0
Estimable Member
Topic starter
 

Boa tarde, Wagner

Obrigado por tentar ajudar.

Então fiz alguns testes usando o seu código e não consegui efetuar a consulta informando os campos ID, Nome ou CPF...
Está sempre retornando o cliente com o maior ID aqui no caso a "cliente" Mariana.

Como mencionei gostaria que o range da pesquisa ficasse restrito ao range da tabela (para evitar problemas caso a tabela mude de posição na planilha)

Por isso tentei escrever um código baseado no seu... ainda assim tem alguns erros (relacionados ao range da pesquisa)... pode tentar adaptá-lo para mim com seus conhecimentos?
Segue o código baseado na situação da minha tabela:

Private Sub Bto_Consultar_Click()

    ' Código para pesquisar o ID, Nome ou CPF inserido na tabela (banco de dados) e preencher as demais textbox e combobox
    'a partir de uma das três informações inseridas (ID, Nome ou CPF)
    '
    '
    '  IMPORTANTE  Range de pesquisa restrito à tabela  -  TB_Cadastro[ID], TB_Cadastro[Nome] e/ou TB_Cadastro[CPF]
    '
    ' Código para bloquear as demais caixas de texto ao final da pesquisa, exceto ID, Nome e CPF
    '
    '
    ' Habilitasse o botão "ALTERAR" somente caso alguma alteração fosse feita a pesquisa
        
    Dim tabela As ListObject
    Dim lin As Long
    Dim ULinha As Long
    
    Set tabela = wsh_Cadastro.ListObjects("TB_Cadastro")
        
    ULinha = tabela.ListRows(1).Range(1, 1).End(xlDown).Row
    
    For lin = tabela.ListRows(1).Range(1, 1).Row To ULinha
    
        If txt_ID.Text = Range("TB_Pacientes[[lin],[ID]]").Value Or txt_Nome.Text = Range("TB_Pacientes[[lin],[Nome]]") Or txt_CPF.Text = Range("TB_Pacientes[[lin],[CPF]]") Then
                   
            Me.txt_ID = Range[color=#FF0000]("TB_Cadastro[[lin],[ID]]")[/color].Value
            Me.txt_Data.Text = Range[color=#FF0000]("TB_Cadastro[[lin],[Data]]")[/color].Value
            Me.txt_Cadastro.Text = Range[color=#FF0000]("TB_Cadastro[[lin],[Cadastro]]")[/color].Value
            Me.txt_Nome = Range[color=#FF0000]("TB_Cadastro[[lin],[Nome]]")[/color].Value
            Me.cbb_Sexo = Range[color=#FF0000]("TB_Cadastro[[lin],[Sexo]]")[/color].Value
            Me.txt_DataNasc = Range[color=#FF0000]("TB_Cadastro[[lin],[Data Nasc]]")[/color].Value
            Me.txt_Idade = Range[color=#FF0000]("TB_Cadastro[[lin],[Idade]]")[/color].Value
            Me.cbb_EstadoCivil = Range[color=#FF0000]("TB_Cadastro[[lin],[Nome]]")[/color].Value
            Me.txt_CPF = Range[color=#FF0000]("TB_Cadastro[[lin],[CPF]]")[/color].Value
        
        End If
    
    Next
                      
    Set tabela = Nothing
        
    End Sub

Private Sub Bto_Consultar_Click()

    ' Código para pesquisar o ID, Nome ou CPF inserido na tabela (banco de dados) e preencher as demais textbox e combobox
    'a partir de uma das três informações inseridas (ID, Nome ou CPF)
    '
    '
    '  IMPORTANTE  Range de pesquisa restrito à tabela  -  TB_Cadastro[ID], TB_Cadastro[Nome] e/ou TB_Cadastro[CPF]
    '
    ' Código para bloquear as demais caixas de texto ao final da pesquisa, exceto ID, Nome e CPF
    '
    '
    ' Habilitasse o botão "ALTERAR" somente caso alguma alteração fosse feita a pesquisa
        
    Dim tabela As ListObject
    Dim lin As Long
    Dim ULinha As Long
    
    Set tabela = wsh_Cadastro.ListObjects("TB_Cadastro")
        
    ULinha = tabela.ListRows(1).Range(1, 1).End(xlDown).Row
    
    For lin = tabela.ListRows(1).Range(1, 1).Row To ULinha
    
        If txt_ID.Text = Range("TB_Pacientes[[lin],[ID]]").Value Or txt_Nome.Text = Range("TB_Pacientes[[lin],[Nome]]") Or txt_CPF.Text = Range("TB_Pacientes[[lin],[CPF]]") Then
                   
            Me.txt_ID = Range("TB_Cadastro[[lin],[ID]]").Value
            Me.txt_Data.Text = Range("TB_Cadastro[[lin],[Data]]").Value
            Me.txt_Cadastro.Text = Range("TB_Cadastro[[lin],[Cadastro]]").Value
            Me.txt_Nome = Range("TB_Cadastro[[lin],[Nome]]").Value
            Me.cbb_Sexo = Range("TB_Cadastro[[lin],[Sexo]]").Value
            Me.txt_DataNasc = Range("TB_Cadastro[[lin],[Data Nasc]]").Value
            Me.txt_Idade = Range("TB_Cadastro[[lin],[Idade]]").Value
            Me.cbb_EstadoCivil = Range("TB_Cadastro[[lin],[Nome]]").Value
            Me.txt_CPF = Range("TB_Cadastro[[lin],[CPF]]").Value
        
        End If
    
    Next
                      
    Set tabela = Nothing
        
    End Sub

Estou enviando a planilha novamente pq atribui o nome "TB_Cadastro" à tabela.

Quem mais puder ajudar... toda ajuda é sempre bem vinda.
Obrigado.

 
Postado : 06/09/2018 9:25 am
(@sandrolima)
Posts: 0
Estimable Member
Topic starter
 

Bom dia, pessoal

Com ajuda e pesquisa cheguei nesse código para os botões "CONSULTAR" e "ALTERAR" mas como estou na fase de aprendizado obviamnte não está funcionando corretamente.

Também já soube com ajuda de colega de outro fórum que o comando Do Until e Loop não seria a melhor opção para retornar a informação e sim o comando FIND.

Alguém pode me ajudar a corrigir o código para que funcione corretamente.

ATENÇÃO *
O principal é que o range de pesquisa fique dentro do intervalo da tabela uma vez que a posição dela pode variar na planilha

Por exemplo em vez de

Linha = Range("A1:A1000").Find(Cadastro).Row (Apenas exemplo)

o Range seria algo do tipo Linha=Range("TB_Cadastro[Cadastro}").Find(Cadastro).Row (Sei que não está correto.... apenas para exemplificar que a busca e retorno devem ficar dentro do intervalo da tabela)

Muito obrigado quem puder ajudar.

 
Postado : 07/09/2018 9:31 am
(@sandrolima)
Posts: 0
Estimable Member
Topic starter
 

Bom dia.

Alguém pode me ajudar a concluir o código?

Informações e planilha no penúltimo post deste tópico.

Obrigado e um bom dia a todos.

 
Postado : 09/09/2018 8:45 am
Wagner Morel
(@wagner-morel-vidal-nobre)
Posts: 0
Illustrious Member
 

SandroLima,

Boa tarde!

Cometi um pequeno erro de lógica na programação. Por isso que você testou e não conseguiu o resultado esperado.

Com relação a questão da procura com nomeação da tabela, não sei como fazer.

Segue versão corrigida.

Desenvolvo pequenas soluções em VBA Excel a valores que variam entre R$ 50,00 a R$ 200,00. Se te interessar, entre no meu instagran (vba_excel_desenvolvimento)

Atenciosamente
Wagner Morel

 
Postado : 10/09/2018 9:14 am
(@sandrolima)
Posts: 0
Estimable Member
Topic starter
 

Obrigado, Wagner.

Funcionou... agora está rodando corretamente.

Vou manter o tópico aberto ainda para ver se algum usuário consegue trazer uma solução para a consulta dentro do intervalo da tabela.

Seria de muita utilidade no caso de alterar a posição da tabela na planilha.

Tenha um bom dia.

 
Postado : 11/09/2018 6:02 am
Wagner Morel
(@wagner-morel-vidal-nobre)
Posts: 0
Illustrious Member
 

SandroLima,

Boa tarde!

Fiz a adaptação necessária para que quando houver qualquer alteração de posição da tabela (desde que mantenha a mesma estrutura), o código continue a funcionar. Veja que coloquei toda a tabela em outra posição e está funcionando normalmente.

Desenvolvo pequenas soluções em VBA Excel a valores que variam entre R$ 50,00 a R$ 200,00. Se te interessar, entre no meu instagran (vba_excel_desenvolvimento)

Atenciosamente
Wagner Morel

 
Postado : 11/09/2018 8:41 am
(@sandrolima)
Posts: 0
Estimable Member
Topic starter
 

Boa noite, Wagner.

Não sabia que estava você ainda estava trabalhando nessa tarefa e muito menos tão breve assim. Muito obrigado.

Mas diante disso continuei a tentar "desenrolar" o código e pelo menos consegui com a ajuda de terceiros uma maneira de manter o range de busca dentro do intervalo da tabela o que elimina o problema de alterar a posição da tabela.

Gostaria de compartilhar com vc para ver o que acha. Infelizmente não consegui finalizar mas sei que falta pouco.

Poderia dar uma olhada nele? Se tiver alguma sugestão ou modificação pode ficar a vontade (de preferência com comentários para o aprendizado do novato aqui rsrs)

Mais alguém que queira participar da construção ou finalização do código. Toda ajuda é sempre bem vinda.

Planilha atualizada em anexo.

E muito obrigado mesmo.

 
Postado : 11/09/2018 3:53 pm
Wagner Morel
(@wagner-morel-vidal-nobre)
Posts: 0
Illustrious Member
 

SandroLima,

Boa tarde!

Segue o seu arquivo após algumas modificações. Está funcionando normalmente.

Desenvolvo pequenas soluções em VBA Excel a valores que variam entre R$ 50,00 a R$ 200,00. Se te interessar, entre no meu instagran (vba_excel_desenvolvimento)

Atenciosamente
Wagner Morel

 
Postado : 12/09/2018 11:57 am
(@sandrolima)
Posts: 0
Estimable Member
Topic starter
 

Boa tarde, Wagner.

Obrigado... estamos desenvolvendo com a mesma ideia. Cheguei em uma escrita parecida com a sua.

Mas estou no mesmo entrave que vc chegou com esse código.... ele funciona apenas quando adicionado o número do "Cadastro".

Se for informado o campo "Nome" ou "CPF" ele não faz a busca. Alimentei a tabela com alguns dados fictícios para teste e não fez a busca.

Pensei em fazer a busca somente pelo "Nome" ou "CPF" e deixar de fazer pelo cadastro (pela facilidade de perguntar para o cliente esses dados na hora de realizar a busca).

E pensei em informar esses campos através de uma inputbox ou um formulário já que serão duas opções de critério de busca (Nome ou CPF)... mas mantendo a base do código... o que acha?

Seria assim ao clicar em "CONSULTAR" abriria o formulário com os campos Nome ou CPF para serem preenchidos (apenas um ou outro deveria ser preenchido, desabilitando o outro caso um deles fosse preenchido)... e ao clicar em "OK" na inputbox/formulário ele retornaria os dados no formulário de cadastro... o que acha?

Mas gostaria de manter a base desse código para manter o módulo e a busca dentro do range da tabela e assim conseguir usar em formulários diversos.

Pode continuar me ajudando?

Envio a tabela atualizada com dados fictícios para vc testar.

Mais uma vez obrigado

 
Postado : 12/09/2018 2:25 pm
(@sandrolima)
Posts: 0
Estimable Member
Topic starter
 

Boa tarde, Wagner

Boa tarde, demais colegas do fórum.

Wagner segue nova proposta de realização da busca dentro do banco de dados da tabela.
Como disse pensei em abrir um formulário com opção de informar apenas Nome ou CPF.
Está apresentando um erro ainda... Pode analisar e verificar qual o erro?

Se alguém mais quiser colaborar... toda ajuda é sempre bem vida.

A proposta é através do form Consulta informar um dos dois campos disponíveis (CPF ou Nome) e retornar as informações no Form Cadastro.

Muito obrigado e tenham uma boa tarde.

 
Postado : 13/09/2018 1:12 pm