O recurso Localizar do Excel (mais conhecido com Ctrl+L entre os veteranos da versão PT-BR) é um dos itens desse poderoso canivete suíço que é a ferramenta.
O inconveniente é que não temos tão facilmente o recurso funcionando da mesma forma pelo VBA. Mesmo que gravemos uma macro utilizando o recurso Localizar, caso a executemos sem que haja um resultado válido para a busca, ele retorna em erro. O motivo é que, no final da macro gravada termina com um .Select, pois a célula com o resultado da busca é ativada quando esta se encerra. Portanto, sem resultado, o erro persiste.
A macro abaixo faz o mesmo papel do busca, porém, prevendo o mau comportamento da macro gravada. Além disso, caso encontre um resultado, ela oferece a continuidade da busca:
Sub Procura() 'Declara uma strign que vai receber o valor a ser procurado na planilha Dim procurado As String 'Declara uma variável para receber o resultado de um MsgBox Dim result As VbMsgBoxResult 'Declara duas variáveis do tipo inteiro 'i -> Para controlar o laço de repetição 'QuantPlanilhas -> para armazenar a quantidade de planilhas da pasta de trabalho atual Dim i, QuantPlanilhas As Integer 'Atribui a quantidade de planilhas da pasta atual à variável QuantPlanilhas 'O método ThisWorkbook.Worksheets.Count retorna esse parâmetro QuantPlanilhas = ThisWorkbook.Worksheets.Count 'Mostra um InputBox para que seja inserido o dado que será procurado em todas a 'Pasta de trabalho e atribui seu valor à variávle procurado procurado = InputBox("Digite o valor a ser procurado", "Valor procurado", "Exemplo, 2, 3, uma data qualquer") 'Inicia o laço de repetição que varre todas as planilhas da pasta de trabalho atual For i = 1 To QuantPlanilhas Step 1 'Seleciona toda a área da planilha With Worksheets(i).Range("A:IV") 'Efetua o método de busca, que retorna o valor se for encontrado ou 'Nothing caso não encontre nada Set c = .Find(procurado, LookIn:=xlValues) 'Caso tenha achado algo, ativa a célula onde está o valor procurado 'e oferece para o usuário se quer ou não continuar a busca If Not c Is Nothing Then Worksheets(i).Select Range(c.Address).Select result = MsgBox("Deseja continuar a busca?", vbYesNo, "Continuar?") 'Caso queira, continua a busca, caso contrário, sai do laço If result = vbNo Then Exit Sub End If End If End With Next End Sub |
Basta executar para observar o resultado.
Bom proveito!
Olá! estou com um probleminha que está me tirando o sono.
A solução do licalizar bate na trave com a que estou buscando.
O que eu preciso é o seguinte:
Tenho que localizar os registros da coluna Plan1!A:A (nome parcial) em outra planilha (plan2) que contem o nome completo.
Caso encontrar preciso copiar a linha inteira com dados cadastrais para uma Plan3.
Se puder me ajudar a montar esta macro, agradeço muito.
André,
Como a quantidade de dúvidas que são enviadas é grande, abri um fórum para melhor atender a estas solicitações. O endereço do fórum é:
http://www.tomasvasquez.com.br/forum
Além disso, a probabilidade de alguém ter tido o mesmo problema e de ele estar resolvido é bem grande. Há inclusive um fórum dedicado a esta planilha. Nos vemos lá!
Abraços
Tomás