Usuário com melhor resposta
Ajuda com Pesquisa de Dados

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:
Dim linha, n°doc, superv
Private Sub CommandButton1_Click()
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!!!
Respostas
-
Use o método Find, é bem mais rápido e adequado:
Code SnippetDim rngFind As Range
Dim superv As StringSet 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
Todas as Respostas
-
Use o método Find, é bem mais rápido e adequado:
Code SnippetDim rngFind As Range
Dim superv As StringSet 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 -
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!!!