Ir para conteúdo
Fórum Script Brasil
  • 0

Alguém poder-me-ia explicar esse código?


MarlonS

Pergunta

Li a seguinte macro e gostaria de entender o que significa e como funciona o .find:

Sub GoToMax ()

Dim WorkRange As Range

If TypeName ( Selection ) <> "Range" Then Exit Sub

If Selection.Count = 1 Then

Set WorkRange = Cells

Else

Set WorkRange = Selection

End If

MaxVal = Application.Max ( WorkRange )

On Error Resume Next

WorkRange.Find ( What:=MaxVal, _

After:=WorkRange.Range ( "A1" ) , _

LookIn:=xlValues, _

LookAt:=xlPart, _

SearchOrder:=xlByRows, _

SearchDirection:=xlNext, MatchCase:=False _

) .Select

If Err <> 0 Then MsgBox "Max value was not found: " _

& MaxVal

End Sub

:( :Por que se usa o underline entre "What:=MaxVal," e "LookIn:" ?

:unsure: O que significa "xl" em xlValues, xlPart, xlBy Rows e todas as vezes em que aparece em VBA?

:rolleyes: O que é MatchCase?

:blink: O que muda entre LookIn e LookAt?

:lol: Posso fazer qualquer tipo de busca com .find?

Link para o comentário
Compartilhar em outros sites

3 respostass a esta questão

Posts Recomendados

  • 0
:( :Por que se usa o underline entre "What:=MaxVal," e "LookIn:" ?

o underline server pra separar uma instrucao em varias linhas. acontece, q depois de "What:=MaxVal,", a instrucao ainda continua, são passados mais parametros para o mesmo metodo (perceba q esta tudo dentro do mesmo parenteses aberto no .Find()), mas pra linha não ficar muito longa, separam com o _ pra continuar embaixo.

:unsure: O que significa "xl" em xlValues, xlPart, xlBy Rows e todas as vezes em que aparece em VBA?

bom, acho q em ingles "xl" funciona tipo como uma abreviacao de excel, deve ser pronunciado exatamente da mesma forma.

mas no caso, não significa mta coisa, xlValues, xlPart e etc são constantes já definidas dentro do vba do excel, e os caras q desenvolver o vba, acharam q "xl" era uma boa forma de identificar as constantes do excel.

ou seja, só servem pra identificar as constantes.

:rolleyes: O que é MatchCase?

se você passar o MatchCase como True, ele vai diferenciar maiusculas de minusculas (por exemplo, ele vai achar q "Kuroi" é diferente de "kuroi"). se você passar False ele não diferencia.

:blink: O que muda entre LookIn e LookAt?

o LookIn define se a busca vai ser feita nas formulas q estao dentro das celulas, ou no texto q esta nela (o resultado da formula).

o LookAt é pra definir se a busca deve encontrar o termo no conteudo todo ou só em parte dele. exemplo, se na celula esta escrito "eu sou o kuroi" e você passar xlPart buscando por "kuroi", ele vai encontrar, pois o xlPart diz q o termo procurado por estar em qualquer lugar no conteudo da celula. agora pra setar q você quer procurar no conteudo todo, se não me engano a constante se chama xlWhole. ai nesse caso, se você buscar "kuroi", ele não vai considerar encontrado no texto "eu sou o kuroi". ele só encontraria se você tivesse buscado pelo texto completo "eu sou o kuroi".

:lol: Posso fazer qualquer tipo de busca com .find?

não necessariamente. vai la na sua planilha e aperte Ctrl + L se não me engano (ou procure no menu pela opcao Localizar). tudo q o metodo .Find() faz é simular a mesma busca q a funcao localizar da planilha faz. ou seja, você não pode fazer nd alem do q as opcoes q você ve la permitem.

tem bastante opcoes, mas por exemplo, se você quiser buscar um valor dentro de um range... exemplo, quero encontrar todas as celulas q tenham valores maiores q 100 e menores q 200, acredito q o .Find() não faca esse tipo de busca, você teria q percorrer a planilha com um codigo feito por você mesmo.

Link para o comentário
Compartilhar em outros sites

  • 0

Cara, muito boa a resposta. Muito obrigado.

Desse modo, então, quando eu precisar fazer relatório em uma planilha que envolva uma busca, por exemplo, em uma tabela com nomes, telefones e estados:

João 000 0000 SP

Rúbia 001 1234 MG

José 612 2020 MG

Natália 123 456 MT

Pablo 777 1011 RJ

Viviane 1221 3344 RS

Larissa 1010 1234 SE

melhor do que percorrer a tabela com while / .offset() e verificar se o nome naquela célula é o digitado; seria melhor eu usar o .find (what=Digitado, etc) e, quando encontrar o nome, copiar as duas próximas células, uma vez que isso significa que posso encontrar

1º Um nome em qualquer lugar (não necessariamente em uma coluna específica).

2º No primeiro caso, limitaria um while de linha = 0 a um tanto x; enquanto que, no segundo, posso adicionar um nome quando quiser que o código não precisa ser alterado. Certo?!

Muito obrigado.

Editado por MarlonS
Link para o comentário
Compartilhar em outros sites

  • 0
isso significa que posso encontrar

1º Um nome em qualquer lugar (não necessariamente em uma coluna específica).

pode ser numa coluna especifica ou na planilha toda. se você usar o metodo .Find() no Selection, ele vai procurar somente entre as celulas q estejam selecionadas no momento. se não tiver selecionado nada, ele deve procurar na planilha toda, acho q é exatamente isso q faz o codigo q você postou la em cima.

se você quiser pesquisar numa determinada coluna independente do selection, por exemplo, na coluna A, você pode usar o .Find() direto nela, assim Range("A:A").Find(). caso você queira pesquisar na planilha toda, independente do selection, acho q você pode fazer Cells.Find() ou Range("A:Z").Find().

2º No primeiro caso, limitaria um while de linha = 0 a um tanto x; enquanto que, no segundo, posso adicionar um nome quando quiser que o código não precisa ser alterado. Certo?!

não entendi direito. o primeiro caso q você fala seria buscar percorrendo a planilha sem usar o .Find() e o segundo seria buscar usando o .Find()??

se for isso, você pode montar um codigo q possa pesquisar qualquer nome sem precisar ser alterado em qualquer um dos casos.

se você precisa saber em q linha acaba a coluna pra poder buscar ate o final dela, você pode usar esse codigo:

Dim ultima_linha As Long
ultima_linha = xlw.Application.Cells(xlw.Application.Cells.Rows.Count, numero_da_sua_coluna).End(xlUp).Row[/code]

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152k
    • Posts
      651,8k
×
×
  • Criar Novo...