none
Ajuda com Pesquisa de Dados RRS feed

  • Pergunta

  • Olá caros amigos, espero que todos estejam bem!!!

    A ajuda que preciso é para VBA do Excel!

    Criei uma interface no VBA (userform) para cadastro de relatórios onde consta várias informações, duas delas são: o número do documento e nome do supervisor responsável pelo documento.
    Criei uma outra página nessa userform onde será realizada a consulta de um determinado relátório pelo n° do documento, ou seja, se quero consultar o relatório 34, digito esse número na textbox e clico no botão busca e ele me retorna os dados desse documento.
    Pois bem, criei uma sub rotina para "varrer" a coluna A em busca do n° do documento que digitei na textbox e quando encontrado é retornado o nome do supervisor que está na coluna D. Para que isso fosse feito fiz o seguinte:

    Private Sub CommandButton1_Click()
    Dim linha, n°doc, superv

    linha = 5   'N° DA LINHA ONDE INICIA OS DADOS NA PLANILHA

    While linha <= 65500  'ENQUANTO O VALOR DE LINHA FOR MENOR OU IGUAL A 65500 A SUB É EXECUTADA

    n°doc = Sheets("BD").Range("A" & linha).Value
    superv = Sheets("BD").Range("D" & linha).Value

    If TextBox1 = CDbl(n°doc) Then
    TextBox2 = superv               
    End If

    linha = linha + 1 ' SOMA 1 NO VALOR DA VARIÁVEL LINHA PARA QUE A BUSCA MUDE PARA A PRÓXIMA LINHA

    If n°doc = "" Then 'QUANDO O VALOR DA VARIÁVEL N°DOC FOR VAZIO O VALOR DE LINHA SERÁ 65501
    linha = 65501       ' SENDO MAIOR QUE 65500, SENDO ASSIM TERMINA A EXECUÇÃO DA SUB
    End If

    Wend
    End Sub


    Gostaria de saber se existe uma maneira mais prática de se ter o mesmo resultado, pois da forma que fiz, funciona mas quando se tem muitos dados na planilha a busca começa a ficar demorada.
    Preciso de uma sub mais simples onde busque para mim na coluna A o valor digitado em uma textbox e retorne o valor da coluna D na mesma linha do valor encontrado.

    Muito obrigado meus amigos e fiquem com Deus!!!
    sábado, 17 de maio de 2008 12:05

Respostas

  • Use o método Find, é bem mais rápido e adequado:

     

    Code Snippet

    Dim rngFind As Range
    Dim superv As String

    Set rngFind = ThisWorkbook.Worksheets("BD").Columns(1).Find(CLng(n°doc))

    If Not rngFind Is Nothing Then
        MsgBox ThisWorkbook.Worksheets("BD").Cells(rngFind.Row, 4).Value
    Else
        MsgBox "Não achou"
    End If

     

     


     

    sábado, 17 de maio de 2008 22:41
    Moderador

Todas as Respostas

  • Use o método Find, é bem mais rápido e adequado:

     

    Code Snippet

    Dim rngFind As Range
    Dim superv As String

    Set rngFind = ThisWorkbook.Worksheets("BD").Columns(1).Find(CLng(n°doc))

    If Not rngFind Is Nothing Then
        MsgBox ThisWorkbook.Worksheets("BD").Cells(rngFind.Row, 4).Value
    Else
        MsgBox "Não achou"
    End If

     

     


     

    sábado, 17 de maio de 2008 22:41
    Moderador
  • Como vão as coisas amigo Luiz Cláudio?

    Muito obrigado pela sua ajuda, a sub funcionou perfeitamente. Aproveitando aqui a oportunidade, gostaria de elogiar esse Fórum e todos os participantes, mas gostaria de dar enfase ao EvangelistaLion e ao AdilsonSoledade, os dois são feras e tem ajudado não só a mim mas como muitos outros participantes desse fórum. Os dois deveriam ganhar um prêmio rsrsrsr

    Muito obrigado Luiz e todos os amigos do Fórum. Fiquem com Deus!!!
    domingo, 18 de maio de 2008 16:30