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 |
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!