Notifications
Clear all

Procv no Vba não Retorna o Valor

35 Posts
2 Usuários
0 Reactions
9,797 Visualizações
(@m_araujo)
Posts: 159
Estimable Member
Topic starter
 

Bom dia a todos pessoa poderia me infomar onde esta o erro
dessa formula.

TxtContrato.Value = Application.VLookup(CbContratante1.Value)(Plan28.Range("A2:I1000"), 1, 0)

Já tentei usar de diversas formas
uma delas foi

TxtContrato.Value = Application.VLookup(Clng(CbContratante1.Value), Plan28.Range("A2:I1000"), 1, 0)

não adiantou nada
tentei novamente

TxtContrato = Application.WorksheetFunction.VLookup(Clng(CbContratante1),Plan28.Range("A2:I1000"), 1, 0)

não retorna erro alguem somente não me retorna o valor da plan28 da coluna A2
poderia me informa onda estou errando :shock:

Obrigado!

At.
Araujo

 
Postado : 21/03/2012 4:07 am
(@m_araujo)
Posts: 159
Estimable Member
Topic starter
 

Bom dia mauro e white
Bom pessoal eu tentei mais nao deu certo Whit fiz como me passou mais não funcionou e nem no verificação imediata mostrou nada
Mauro eu estou tentando mais ainda nao conseguir , mais gostaria de deixa algo claro acho que não entenderam
eu estou buscando o valor da planilha 28 que esta na coluna A2 a que seja igual ao valor do combox que pega o a coluna C da mesma planilha
entendem sera que é isso que esta dando eerros um valor na frente q esta sendo buscado por um valor atraz
tipo quero o valor da COLUNA A2 buscando na COLUNA C2
obrigado
At.
Araujo

 
Postado : 22/03/2012 5:29 am
(@m_araujo)
Posts: 159
Estimable Member
Topic starter
 

White segue em anexo a imagem das opções em preferencias como solicitado

At.
Araujo

 
Postado : 22/03/2012 5:42 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

White, quanto as referencias, abra o arquivo desabilitando as macros, va no editor do VBA e desabilite as que estiverem como ausentes, pelo menos comigo funcionou.

Araujo, aqui no serviço não temos v2007, mas se leu a obs do White, é exatamente isto que ele comentou

mas pude notar que o procv que você faz é buscando pelo código contratantes que está na coluna C e a matriz do VLookup começa em A2 ("A2:I100"). Não seria ("C2:I100")?

e pelo que me lembro quando vi seu exemplo ontem, de fato o combo que cita é carregado com os valores "BUNG, ADM e ADM_2", se não me falha a memoria, e os mesmos estão na Coluna "C" da Plan28 e a function está procurando este valor na Coluna "C", então a referencia tem de ser "C2:I100", utilizando "A2:I100", o PROCV entende que o Valor a ser pesuisado "BUNG" está na Coluna "A".

Conforme citei no post anterior, teria de se adaptar a function VLookup para realizar este tipo de pesquisa, retornar valores a esquerda, e isto tem de ser feito com as funções Indice, Corresp, por isto que sugeri a function que postei, é bem mais simples.

[]s

 
Postado : 22/03/2012 6:05 am
(@m_araujo)
Posts: 159
Estimable Member
Topic starter
 

Mauro não conseguir usar sua function
seguir seu exemplo mais não tiver resultados positivo dar erros
veja ficou assim
Private Sub CbContratante1_Change()
Dim sCel

Dim sbContratante1 As String

sContratante1 = CbContratante1.Value

sVal = ProcuraRefId(sContratante1)

TxtContrato = sCel
Public Function ProcuraRefId(ByVal RefId As String) As String
Dim iLin As Long
Dim sCol As Long

sLocaliza = False

Dim wsContratos As Worksheet
Set wsContratos = Worksheets("Contratos")

iLin = 2 'Inicia a pesquisa na Linha 2
sCol = 3 'Pesquisa na Coluna 3 - Col C

With wsContratos

Do While Not IsEmpty(.Cells(iLin, sCol))

If .Cells(iLin, sCol).Value = RefId Then

sLocaliza = True 'Verdadeiro se encontrado

'MsgBox .Cells(iLin, 2).Value 'Retorna o Valor da Coluna 2 - B
sCel = .Cells(iLin, 2).Value

Exit Do 'Sai do Loop se encontrar

End If

'Incrementa a linha
iLin = iLin + 1

Loop

End With
End Function
fica dado erro de Era Esperado End Sub
pode me informa onde eu errei

At.
Araujo

 
Postado : 22/03/2012 6:21 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Araujo, são instruções separadas, uma é referente ao evento Change do Combo e a outra é a Function.

Coloque o End Sub após : TxtContrato = sCel

Nos testes que fiz ontem, se as obs do White e minha estão corretas, a function retornava corretamente o valor para TxtContrato
,
[]

 
Postado : 22/03/2012 6:27 am
(@m_araujo)
Posts: 159
Estimable Member
Topic starter
 

:( Mauro cara to ficando muito desanimado hem cara so torrando voces infelismente ainda nao deu certo cara
usei a sua dica como vc mesmo postou vc fez o teste deu certo
deve ser eu cara não funcionou comigo não hem
vou esta tentanto resolver se tiverem mais ideias
manda ver..
obrigado

 
Postado : 22/03/2012 12:22 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Araujo, dizer somente que não deu certo, e não expecificar se deu algum erro ou se está trazendo o valor errado, fica um pouco dificil de adivinhar, mas faça o seguinte, baixe o exemplo no link abaixo, analise, e será mais facil de voce adaptar depois ao seu modelo :

Function Pesquisar InputBox e TextBox
viewtopic.php?f=21&t=2877

Na Function que passei no post anterior, desabilite esta msgbox para ver qual está sendo o retorno.
'MsgBox .Cells(iLin, 2).Value 'Retorna o Valor da Coluna 2 - B

Se ainda não conseguir, só mais tarde poderei ver, aqui n tenho 2007.

[]s

 
Postado : 22/03/2012 1:04 pm
(@m_araujo)
Posts: 159
Estimable Member
Topic starter
 

Araujo, dizer somente que não deu certo, e não expecificar se deu algum erro ou se está trazendo o valor errado, fica um pouco dificil de adivinhar

[]s

Mauro foi mau me esqueci cara
mais deixa eu tentar corrigir minha falha não retornou erro algum o campo Txtcontrato fica limpo como neve
bom mais to biaxando seu arquivo vou esta analizando direitinho aqui
e sobre mudar a linha do msbox eu mudei sim okei
obrigado e desculpa pela falha ai :)

 
Postado : 22/03/2012 1:21 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Bom, eu sou teimoso e não desisto rsrs

Fiz um form com um combobox e fazia o mesmo procedimento que você quer e estava dando:

val = Application.WorksheetFunction.VLookup(ComboBox1.Value, Sheets("Plan2").Range("A1:c5"), 2, 0)

Não é possível obter a propriedade VLookup da classe WorksheetFunction

Aí joguei para uma variável e também dava o mesmo erro.

Então fiz um teste e joguei para uma célula do Excel e funcionou.

Sheets("plan3").Range("a1").Value = ComboBox1.Value
val = Application.WorksheetFunction.VLookup(Sheets("plan3").Range("a1").Value, Sheets("Plan2").Range("A1:C5"), 2, 0)

Faz um teste aí jogando o valor da Combo numa célula do Excel.

 
Postado : 22/03/2012 7:01 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Testei novamente no meu arquivo teste com Combobox1.Value * 1 (pois estou pesquisando valores numéricos e também funcionou). Dai compreendi que ele dá erro sempre que não achar nada na matriz e em vez de retornar #N/D conforme o procv faz, ele dá erro na rotina, indo para o depurador. Nem usando IfError adianta, temos que usar o On Error Goto Line ou Resume Next mesmo para ele sair dessa linha.

Então voltando a sua primeira postagem mude conforme abaixo:

TxtContrato.Value = Application.VLookup(CbContratante1.Value, Plan28.Range("C2:I1000"), 1, 0)

Vai retornar ele próprio por que tá 1.

 
Postado : 22/03/2012 7:26 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Ehite, o que o Araujo está pretendendo é retornar o valor a esquerda do valor procurado, e isto o PROCV não faz.
De uma olhada nos tópicos abaixo, estou anexando um modelo, com formulas, estou em outro projeto e ainda não ajustei a função para o VBA, por isto indiquei aquela function.

Problemas com a fórmula PROCV
viewtopic.php?f=11&t=1156

Procv pesquisa coluna esquerda
viewtopic.php?f=11&t=1673

Sinta-se a vontade para ver se transforma a formula em VBA.

Procv a Esquerda

[]s

 
Postado : 22/03/2012 9:05 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Mauro

Eu sei que o procv não busca para a esquerda, teriamos que usar Índice + Corresp para tal situação. Por isto falei para ele deixar o 1 na coluna de retorno do vlookup assim retornaria a própria coluna pesquisada da matriz. Isto é só para ele ver que funciona o Vlookup e que a sintaxe estava correta, o problema era que vai direto para o depurador do VBE.

Depois ele poderia fazer os ajustes na base colocando os dados das colunas A e B para a direita.

 
Postado : 22/03/2012 9:13 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Correto White, mas pelo que vi pelas postagem dele e o modelo que anexou, o Combo é carregado com os dados da coluna C (Textos) e ele quer utilizar este valor para retornar o dado que está ou na coluna A ou B.
Lendo seu post, e aproveitando a sua DICA ele poderia mudar os dados da col C para a Coluna A, assim não teria de ficar fazendo adaptação no PROCV, uma vez que ele quer mesmo utilizar esta função.

[]s

 
Postado : 22/03/2012 9:23 pm
(@m_araujo)
Posts: 159
Estimable Member
Topic starter
 

Bom dia a todos rs rs :)
Amigos eu acabei disistindo da ideia de pesquisar a esquerda tseguindo a dica do Mauro rs rs
eu adicionei um novo campo na planilha logo depois da coluna C com o numero do contrato
e então eis o codigo

TxtContrato.Value = Application.VLookup(CLng(CbContratante1.Value), Plan28.Range("A2:I1000"), 4, 0)

so que não deu certo não sei se foi porque fiquei tentanto e tentanto varias vezes possa ser q tenha algo ai que eu nao consiga ver
então me der mais essa ajudinha por favor .
At.

 
Postado : 23/03/2012 4:47 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

O número do contrato tem que estar na coluna A da plan28 já que você está usando este range Plan28.Range("A2:I1000"). O procv/vlookup vai pesquisar na 1 coluna da matriz e retornar a coluna adjacente desejada.

E como o valor que você está pesquisando é texto, não precisa do CLng (se não vai dar erro)

Então coloque o código referente ao contrato para a coluna A, pois o CbContratante1.Value vai trazer um a valor e vai pesquisa-lo em A2 até A1000, achou, vai trazer o que tem na coluna D na caso abaixo. A coluna você ajusta de acordo com a sua necessidade (acho que vai virar 5 já que vai adicionar mais uma coluna).

TxtContrato.Value = Application.VLookup(CbContratante1.Value, Plan28.Range("A2:I1000"), 4, 0)

 
Postado : 23/03/2012 5:05 am
Página 2 / 3