MarlonS Postado Dezembro 16, 2010 Denunciar Share Postado Dezembro 16, 2010 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: " _ & MaxValEnd 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? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 kuroi Postado Dezembro 16, 2010 Denunciar Share Postado Dezembro 16, 2010 :( :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. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 MarlonS Postado Dezembro 16, 2010 Autor Denunciar Share Postado Dezembro 16, 2010 (editado) 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 SPRúbia 001 1234 MGJosé 612 2020 MGNatália 123 456 MTPablo 777 1011 RJViviane 1221 3344 RSLarissa 1010 1234 SEmelhor 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 encontrar1º 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 Dezembro 16, 2010 por MarlonS Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 kuroi Postado Dezembro 17, 2010 Denunciar Share Postado Dezembro 17, 2010 isso significa que posso encontrar1º 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 Longultima_linha = xlw.Application.Cells(xlw.Application.Cells.Rows.Count, numero_da_sua_coluna).End(xlUp).Row[/code] Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
MarlonS
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
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.