sexta-feira, 22 de março de 2013

PESQUISA EM VBA. CÓDIGO MODELO...

CÓDIGOS MODELOS... FUNÇÃO PESQUISAR




Visitem meu novo blog:

https://programacaopassoapasso.wordpress.com/




Dando continuidade aos posts CÓDIGOS MODELOS... hoje vou ensinar a fazer o código que irá pesquisar as informações cadastradas...



Vejam o resultado esperado ao fim deste post....













Veja Links dos post relacionados a esse...

http://excelamador.blogspot.com.br/2013/03/funcao-vba-para-cadastros-parte-ii.html


Para começarmos  vou abrir 
a pasta criada nos post
anteriores e cadastrar umas 
quatro informações...


______________________________________________________

Irei inserir 1 rótulo e uma 
caixa de texto para digitarmos 
o que vamos pesquisar...

rótulo = PESQUISAR

caixa de texto = TXT_PESQUISA


_________________________________________________________________________________

Inserir também um ListBox 
que é onde serão exibidas as 
informações pesquisadas... 
vamos alterar a propriedade
 (Name) dela para
 LIST_PRODUTO...

_________________________________________________________________________________

Inserir três rótulos também 
para servir de título para o 
ListBox...

_________________________________________________________________________________
Alterar as propriedades do ListBox... 

Definir a quantidade de colunas 
e a largura de cada uma delas...

_________________________________________________________________________________
Bom o código modelo é esse vou marcar as partes que devemos atribuir os nossos objetos...



Function NOMEDAFUNÇÃO()

    Dim i As Integer
    Dim BANCO As Database
    Dim TABELA As Recordset
    Set BANCO = OpenDatabase(ThisWorkbook.Path & "/" & ThisWorkbook.Name, False, False, "EXCEL 8.0")
    
    Set TABELA = BANCO.OpenRecordset("SELECT * FROM [NOME_DA_PLANILHA$] WHERE PESQUISAR_EM_QUAL_CAMPO LIKE '" & FORMULARIO.OBJETO_DA_PESQUISA & "*';")
    
    FORMULARIO.OBJETOLISTBOX.Clear
    
    Do Until TABELA.EOF
   
    FORMULARIO.OBJETOLISTBOX.AddItem TABELA("CAMPO")
    FORMULARIO.OBJETOLISTBOX.List(i, 1) = TABELA("CAMPO")
    
    
    i = i + 1
    TABELA.MoveNext
    Loop
    BANCO.Close
End Function

_______________________________________________________________________

Bom então 
vamos copiar o 
código acima e colar 
dentro do nosso módulo...








____________________________________________________
Agora vamos alterar as 
partes marcadas no código...
Function NOMEDAFUNÇÃO()
____________________________________________________
* FROM [NOME_DA_PLANILHA$] WHERE


Vejam que esse nome é referente ao nome da nossa aba na planilha... que criamos nos post anteriores...
____________________________________________________
WHERE PESQUISAR_EM_QUAL_CAMPO LIKE


Vamos pesquisar o nome do produto então o campo da pesquisa deve ser o PRODUTO que se encontra na planilha...
____________________________________________________
LIKE '" & FORMULARIO.OBJETO_DA_PESQUISA & "*';")

Nessa parte temos que informar a partir de qual objeto o código irá buscar as informações... no caso é o objeto TXT_PESQUISAR... já o formulário é o UserForm1...
____________________________________________________
FORMULARIO.OBJETOLISTBOX.Clear
Esse código (Clear) serve para limpar o ListBox, antes de inserir os dados da pesquisa, para não inserir novamente dados repetidos...

Então
FORMULARIO = UserForm1



OBJETOLISTBOX = LIST_PRODUTO...
____________________________________________________

FORMULARIO.OBJETOLISTBOX.AddItem TABELA("CAMPO")


Aqui o formulário e o objeto listbox nós já sabemos quais são, falta dizer qual campo da planilha será pesquisa e inserido na coluna 1 do ListBox, esse campo é o NUMERO...
____________________________________________________
List(i, 1) = TABELA("CAMPO")


O numero 1 após a "," no pedaço de código acima, indica que é a segunda coluna do ListBox e temos que informar qual será o campo de onde iremos puxar as informações... 

Vamos por o segundo campo da planilha (PRODUTO)...
____________________________________________________
Como na nossa planilha temos três campos (NUMERO|PRODUTO|VALOR) irá faltar uma coluna para ser pesquisada, nesse caso vamos copiar a linha:

FORMULARIO.OBJETOLISTBOX.List(i, 1) = TABELA("CAMPO")

e a coluna vamos trocar para 2, sendo que será a terceira, já deu para perceber que o numero das colunas no ListBox começa do 0...






____________________________________________________


Agora para finalizar vamos chamar essa  função criada dentro do objeto TXT_PESQUISA...






____________________________________________________


Ainda dentro do objeto TXT_PESQUISA vamos por o código que converte tudo o que é digitado para maiúsculo... pois a pesquisa difere o formato das letras... e como o nosso cadastro será feito todo em  maiúsculo...
____________________________________________________



Vamos agora executar nosso projeto e fazer uma pesquisa...



Bom galera espero sinceramente que estejam gostando. Estou muito feliz com os comentários postados por vocês leitores. Continuem lendo e comentando que continuarei postando rsrsrsrsrs...


Abraços a todos e até a próxima postagem...

Edivan cabral....

13 comentários:

  1. Edvan,
    como posso colocar esse código para interromper uma macro?
    se a célula A2 for vazia não executar a macro
    se não for continuar

    ???

    ResponderExcluir
  2. no ponto que deseja parar a macro ponha assim...

    if plan1.range("A2").value = "" then
    exit sub
    else
    end if


    if plan1.range("A2").value = "" then 'aqui voce deve trocar plan1 pela referencia da sua planilha no projeto (suponhamos que sua ABA seja "EDIVAN" assim deve estar plan1(EDIVAN) aí você procura saber qual plan esta a célula que vai querer verificar...

    Exit sub é o código que finaliza a macro

    tenta aí se nao conseguir faço um post para você sobre o assunto...

    vlw Edivan Cabral

    ResponderExcluir
  3. Edivan, qual rotina devo colocar para que quando selecionar um produto na listbox o mesmo preencha os campos automaticamente para uma possivel alteração no produto.

    ResponderExcluir
  4. No meu blog tem um post sobre alterações,

    http://excelamador.blogspot.com/2013/03/codigos-modelos-alteracoes-em-vba.html?token=OAJ6SD4BAAA.vtD94fw866pfMehCRPM9EA.hhVdsJNMMRxFTC1TtvHY9Q&postId=8738926445487480240&type=POST

    faz exatamente isso, veja se consegue acessar o link se não procure por CODIGOS MODELOS... ALTERAÇÕES EM VBA...

    ResponderExcluir
  5. Edvan obrigado, pelas dicas, estou a menos de um mês elaborando um projeto em vba, e estou indo bem graça ao seu blog, mais uma pergunta, a limite de coluna na listbox?, pois tentei 3 vezes e ocorre erro sempre na mesma linha
    Exemplo
    UserForm1.LIST_PRODUTO.AddItem TABELA("N")
    UserForm1.LIST_PRODUTO.List(i, 1) = TABELA("NOME")
    UserForm1.LIST_PRODUTO.List(i, 10) = TABELA("PLACA") essa linha sempre da erro

    Desde já obrigado!!

    ResponderExcluir
    Respostas
    1. Na verdade o ListBox só tem espaço para 10 colunas mesmo, assim sendo só vai funcionar até o List(i,9) uma vez que a primeiro coluna é representada pelo Additem TABELA("N")... o que você pode estar fazendo é o seguindo rsrsr eu já fiz isso muito, tipo você quer uma coluna para PLACA e uma para "X" coluna as 2 na mesma coluna do ListBox exemplo:

      UserForm1.LIST_PRODUTO.List(i, 9) = TABELA("PLACA") & " " & TABELA("X")

      desse modo tem as duas informações em uma unica coluna, sendo que o & " " & serve para dar um espaço entre uma informação e outra, aí o cabeçalho da coluna você coloca nas proximidades vai testando até chegar onde você quer...

      Excluir
  6. Este comentário foi removido pelo autor.

    ResponderExcluir
    Respostas
    1. To com um pequeno problema, quando eu vou pesquisar um item, ele pesquina mas quando eu apago, aparece na lista todos os itens cadastrado, é algum erro meu, ou isso é da formula mesmo?

      Excluir
  7. Edvan boa tarde, estou com um grande problema e não encontro em nenhum lugar a resposta.

    eu criei uma userform, e nela tem uma TEXTBOX, que nela eu vou utilizar um leitor de codigo de barras e queria realiza a seguinte função, assim que eu bipar o meu codigo que tem 20 caracteres."ja limitei o textbox para maximo de 20 caracteres". ele ja jogasse essa informação do codigo automaticamente em uma celula do excel. sem eu ter que clicar no botão para executar esse comando.

    se conseguir me ajudar agradeço muito.

    ResponderExcluir
    Respostas
    1. Boa tarde..
      fica assim o código

      Range("A4").Value = suatext.Text

      Excluir
  8. Edivan o meu nao rolou aparece um erro de compilação.

    A depuração demarca a linha "Dim BANCO as Database"
    Gustavo, rgustavo32@Hotmail.com
    O que eu faço?

    ResponderExcluir
  9. Aqui diz "Erro de compilação: O tipo definido pelo usuário não definido", como resolvo Edivan?

    ResponderExcluir