Notifications
Clear all

Macro para busca

6 Posts
2 Usuários
0 Reactions
1,524 Visualizações
(@giovannik)
Posts: 4
Active Member
Topic starter
 

Fiz uma macro para localizar convidados por nome e outra por código que apresenta o nome o codigo, o telefone e MESA do convidado
Mas agora preciso fazer um que através do numero da mesa, apresente todos os convidados (somente o nome) que estarao nesta mesa

*O mesmo numero de mesa estara associado a varios convidados
*O valor nome estará a coluna B e a nº mesa na coluna D
A principio nao consegui pois o valor da mesa se confunde com os códigos, nao consegui fazer procurar só na coluna D

Estou mandando o Exemplo da MACRO NOME

Sub MacroNome()
'
' Macro2 Macro
' Macro gravada em 06/12/2012 por Portão Ofício dos Registros Públicos
'
' Atalho do teclado: Ctrl+h
'
Pesquisa = InputBox("Informe o NOME do Convidado", "Pesquisar Valores")
If Pesquisa = "" Then Exit Sub
Set Plan = Sheets("planilha2")
Set x = Plan.Cells.Find(what:=Pesquisa)
If Not x Is Nothing Then
firstAddress = x.Address
Do

MsgBox "Convidado Localizado! " & _
Chr(10) & "Nome: " & x.Text & Chr(10) & "Codigo: " & x.Previous & Chr(10) & "Telefone: " & x.Next & Chr(10) & "Mesa: " & x.Next.Next
Set x = Plan.Cells.FindNext(x)
Sheets().Select 'volta para a planilha anterior

Loop While Not x Is Nothing And x.Address <> firstAddress
Else
MsgBox "Convidado não localizado "
End If

End Sub

 
Postado : 07/12/2012 12:49 pm
(@giovannik)
Posts: 4
Active Member
Topic starter
 

Segue meu arquivo do Excel para facilitar a compreensão.
:D

 
Postado : 07/12/2012 1:07 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Veja se é o que espera

Sub PesquiMesa()
'Declaraçao das Variaveis
Dim Procurar, Achei
Dim EndPrimeiroItem
Dim Localizado

Procurar = InputBox("Digite a mesa a ser localizada...", "Localizar Mesa")
If Procurar = "" Then Exit Sub

Application.ScreenUpdating = False
Achei = ""
With Sheets("Planilha2").Range("D:D")
        
    ' Carrega a variavel de Objeto Localizado
    Set Localizado = .Find(Procurar, LookIn:=xlValues, LookAt:=xlWhole)
    'Para localizar parte do texto na celula, mudar a propriedade para xlPart
    
    If Not Localizado Is Nothing Then
        EndPrimeiroItem = Localizado.Address  'guarda o endereço da célula do 1º.valor localizado
        
        Do
            Localizado.Select
            If Localizado.Offset(0, -2).Value = "" Then
                Achei = Achei & Chr(10) & "Vazio"
            Else
                Achei = Achei & Chr(10) & Localizado.Offset(0, -2).Value
            End If
            Set Localizado = .FindNext(Localizado)  'Segue a procura
        Loop While Not Localizado Is Nothing And Localizado.Address <> EndPrimeiroItem
    MsgBox "Mesa " & Localizado & ": " & Achei
    End If
End With
End Sub
 
Postado : 08/12/2012 11:57 am
(@giovannik)
Posts: 4
Active Member
Topic starter
 

Reinaldo, muito obrigado pela resposta, a principio tudo corre bem, mas na linha Localizado.Select, aparece: O método select da classe Range falhou.
Desde já agradeço.

 
Postado : 10/12/2012 7:05 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Gionani, a principio, o erro se dá porque não temos a "Planilha2" em foco, ou seja selecionada, se rodar a rotina com a aba "Planilha2" ativa verá que não da erro.

Pelo que entendi, você até pode eliminar esta linha, uma vez que temos a instrução "Application.ScreenUpdating = False", que congela a tela, e ela impede que se navegue até esta aba, então o "Select" não teria efeito, mas, se não quiser eliminar a Instrução troque-a pela a abaixo :

Range(Localizado.Address).Select

[]s

 
Postado : 10/12/2012 7:55 am
(@giovannik)
Posts: 4
Active Member
Topic starter
 

Realmente, foi só excluir a linha. Muito grato pela ajuda de vocês, foi muito valiosa.
Ótima semana e boas Festas!!

 
Postado : 10/12/2012 8:05 am