Você quer localizar um valor em uma pasta de trabalho do Excel, porém o CTRL+L só traz os resultados da planilha em que você está. Ou seja se você quisesse um resultado diferente teria que ir de aba em aba usando CTR+L, o que seria uma perda de tempo.
No post de hoje vou ensinar como criar um localizar avançado no Excel que procura em todas as planilhas e não só na atual, se gostarem em um outro post eu posso fazer um para substituir os valores localizados nas planilhas.
//
//
//
//
Criando o formulário
- Com o Excel aberto, clique na guia Desenvolvedor e no botão Visual Basic.
- Clique no projeto VBAProject(PERSONAL.XLSB).
- Selecione o menu Inserir->User Form
- Clique no formulário criado e selecione na caixa de ferramentas os objetos:
- Frame = altere a propriedade name para frDados e a Caption para Pesquisar
- Lable = altere a propriedade Caption para Pesquisar
- TextBox = altere a propriedade name para txtPesquisa
- CommandButton = altere a propriedade Caption para Pesquisar
- Frame2 = altere a propriedade Caption para Resultados
- ListBox = altere a propriedade Name para listResultado, a propriedade ForeColor para &H00FF0000& e fonte marcar como sublinhado.
Programação
Clique duas vezes sobre o botão Pesquisar e insira o código abaixo:
Private Sub CommandButton1_Click() Dim currentFind As Excel.Range Dim firstFind As Excel.Range Dim lQtdePlan As Integer Dim lPlanAtual As Integer Dim lPlanFim As Boolean 'Conta a quantidade de planilhas lQtdePlan = Worksheets.Count lPlanAtual = 1 lPlanFim = False 'Limpa os resultados listResultado.Clear 'Verifica se há texto para pesquisar If txtPesquisa.Text <> "" Then 'Loop pelas planilhas While lPlanAtual <= lQtdePlan 'Define a Range de Pesquisa Set currentFind = Worksheets(lPlanAtual).Range("A1:XFD1048576").Find(txtPesquisa.Text, , _ Excel.XlFindLookIn.xlValues, Excel.XlLookAt.xlPart, _ Excel.XlSearchOrder.xlByRows, Excel.XlSearchDirection.xlNext, False) Set firstFind = Nothing 'Realiza o loop das pesquisas While Not currentFind Is Nothing And lPlanFim = False If firstFind Is Nothing Then Set firstFind = currentFind ElseIf currentFind.Address = firstFind.Address Then lPlanFim = True End If If lPlanFim = False Then Set currentFind = Worksheets(lPlanAtual).Range("A1:XFD1048576").FindNext(currentFind) listResultado.AddItem (Worksheets(lPlanAtual).Name & "!" & currentFind.Address) End If Wend 'Passa para a próxima planilha lPlanAtual = lPlanAtual + 1 lPlanFim = False Wend End If Sair: Exit Sub End Sub
Clique duas vezes no ListBox e insira o código abaixo:
Private Sub listResultado_Click() Dim lRng As Range Dim lEndereco() As String 'Separa a planilha da célula lEndereco = Split(listResultado, "!") 'Abre a planilha Worksheets(lEndereco(0)).Activate 'Define o endereço Set lRng = Range(lEndereco(1)) 'Ativa o endereço lRng.Activate End Sub
Clique na guia Inserir Módulo, e no módulo criado insira o código abaixo:
Sub gsLocalizarAvancado() frmPesquisaAvancada.Show End Sub
Salve e feche o ambiente de desenvolvimento, voltando desta forma para a pasta de trabalho.
Criando o Atalho
- Clique na guia Desenvolvedor e no botão Macros, selecione a função PERSONAL.XLSB!gsLocalizarAvancado.
- Clique no botão Opções e na caixa tecla de atalho digite Shift+l, ou seja L maiúsculo.
Concluindo
Como resultado temos que uma tela que será chamada quando você digitar CTRL+SHIFT+L e que irá realizar uma busca por todas as planilhas da pasta de trabalho aberta já com link para ela, ou seja ao clicar nos resultados você será direcionado diretamente para ele, assim como o localizar nativo do Excel.
Então é isso amigos, agradeço a leitura do artigo, e se tiverem dúvidas, sugestões ou comentários sobre o blog fiquem a vontade para fazer.
Marcos Rieper
//
//
//
//