Notifications
Clear all

Resultado do VLookup da coluna á esquerda

5 Posts
3 Usuários
0 Reactions
1,418 Visualizações
(@wolneypk)
Posts: 188
Reputable Member
Topic starter
 

Amigos, como todos sabem a função VLookup, faz suas pesquisas baseadas na primeira coluna da referencia e dá como resultado as colunas especificadas á sua direita.
Eu estou tentando fazer uma busca com ele mais o resultado tem que ser de uma coluna que está á sua esquerda.

Tentei fazer o seguinte:

item_cod = "A" & (Application.WorksheetFunction.VLookup((ComboBox1.Text), Plan5.Range("B2:C300"), 1, 0).Row) 'aqui tento pegar qual é o numero da linha do resultado da busca
TextBox6.Text = Range(item_cod)

Não sei se oq eu estou tentando fazer é pura viajem ou se realmente é viável!
Dessa maneira que eu estou tentando está dando o seguinte erro: "O Objeto é obrigatório"
Alguém poderia me dar uma luz?

 
Postado : 25/06/2013 9:00 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Wolney, infelizmente a função PROCV não retorna valores a esquerda, você teria de adaptar o seu código com outro tipo de busca ou funções, veja no tópico abaixo uma possível solução e outra sobre procurar valores a esquerda, mas com formulas.

Neste tamebm queriam o retorno da esquerda.
Procv no Vba não Retorna o Valor [Resolvido]
viewtopic.php?f=10&t=3788&start=10

Neste ótimas resoluções de como contornar com a junção de outras funções:

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

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

Índice+Corresp (PROCV mais eficiente!)

http://doutorexcel.wordpress.com/2011/0 ... eficiente/

Se ficar dificil, o ideal é anexar um modelo com poucos dados e compactado conforme estão dispostos os seus dados.

[]s

 
Postado : 25/06/2013 10:22 am
(@wolneypk)
Posts: 188
Reputable Member
Topic starter
 

Então Mauro, por falha minha, eu esqueci de dizer que não era o Procv do Excel, e sim do proprio Vba (VLookup) que segue aquele modelo:
Application.WorksheetFunction.VLookup((ComboBox1), Plan1.Range("B2:Q45"), 3, 0)
Sabe?

Pra facilitar, estou anexando o arquivo para os amigos verificarem.
O que se passa é no Form "pedido".
Eu quero que, ao selecionar a Combobox1, ele jogue na Textbox do Codigo do produto, a numeração que represente ele (Planilha Cadastro_produtosth)

Se puder dar uma olhada Mauro, ficaria muito grato meu caro!
Segue o link do arquivo: http://www.4shared.com/zip/lI3IfuPk/projeto_cad_clientes_1.html

Forte abraço!

 
Postado : 25/06/2013 11:05 am
(@finaljustice)
Posts: 91
Estimable Member
 

Então Mauro, por falha minha, eu esqueci de dizer que não era o Procv do Excel, e sim do proprio Vba (VLookup) que segue aquele modelo:
Application.WorksheetFunction.VLookup((ComboBox1), Plan1.Range("B2:Q45"), 3, 0)
Sabe?

Pra facilitar, estou anexando o arquivo para os amigos verificarem.
O que se passa é no Form "pedido".
Eu quero que, ao selecionar a Combobox1, ele jogue na Textbox do Codigo do produto, a numeração que represente ele (Planilha Cadastro_produtosth)

Se puder dar uma olhada Mauro, ficaria muito grato meu caro!
Segue o link do arquivo: http://www.4shared.com/zip/lI3IfuPk/projeto_cad_clientes_1.html

Forte abraço!

Olá

Bem se eu bem entendi, você está querendo popular textbox de acordo com um resultado de uma Combobox.
Se esse for o caso, eu faria de outra maneira veja se isso te ajuda.
Abaixo este código irá dar um noma para uma lista. No seu caso:

Sheets(5).Range("B2").select
Range(ActiveCell, Cells(1048576, ActiveCell.Column).End(xlUp)).Name = "nomesdosprodutos"

Em seguinda você deverá fazer com que essa lista seja linkada a uma combobox. No seu caso a Combobox1 (pelo oq entendi)

Private Userform_Initialize
Pedido.ComboBox1.RowSource = "nomedosprodutos"
End sub

Agora que temos valores carregados na Combobox podemos usar ela para fazer a procura e preencher as outras caixas de texto.

Application.ScreenUpdating = False
Sheets(5).Select
Sheets(5).Range("B2").Select 'estou presumindo que era essa lista que era para estar na combobox e era ela que q rege a procura.

Do While ActiveCell <> Empty 'desce a lista, quando for igual para e preenche as textboxs que deseja.
    If ActiveCell.Text = Pedido.ComboBox1.Value Then
        For i=1 to 10 ' esse valor de 10 coloquei arbitrariamente que seriam teoricamente 10 textbox que iria preencher. 
        Pedidos.Controls("Textbox" & i ) = Activecell.offset(0, i) 'de novo assumindo que suas texbox e os offset delas esteja alinhados (q é pouco provável)
        Next i
    End If
    
    ActiveCell.Offset(1, 0).Select
        
Loop
Application.ScreenUpdating = True

End Sub

Esse exemplo acima está com a ideia principal, as constantes precisam da sua atenção para alinha tudo, mas enfim acho que assim, vc preenche suas textboxes sem a necessidade de vlookup.

Qualquer dúvida so falar.
abço

 
Postado : 25/06/2013 2:48 pm
(@finaljustice)
Posts: 91
Estimable Member
 
TextBox13.Value = Sheets("Cadastro_Clientes").Range("O" & numero_linha).Value
TextBox15.Value = Sheets("Cadastro_Clientes").Range("Q" & numero_linha).Value
TextBox21.Value = Sheets("Cadastro_Clientes").Range("BI" & numero_linha).Value
TextBox22.Value = Sheets("Cadastro_Clientes").Range("BJ" & numero_linha).Value
TextBox23.Value = Sheets("Cadastro_Clientes").Range("BK" & numero_linha).Value
TextBox24.Value = Sheets("Cadastro_Clientes").Range("BL" & numero_linha).Value
TextBox25.Value = Sheets("Cadastro_Clientes").Range("BM" & numero_linha).Value
TextBox26.Value = Sheets("Cadastro_Clientes").Range("BN" & numero_linha).Value
TextBox27.Value = Sheets("Cadastro_Clientes").Range("BO" & numero_linha).Value
TextBox28.Value = Sheets("Cadastro_Clientes").Range("BP" & numero_linha).Value
TextBox29.Value = Sheets("Cadastro_Clientes").Range("BQ" & numero_linha).Value
TextBox30.Value = Sheets("Cadastro_Clientes").Range("BR" & numero_linha).Value
TextBox31.Value = Sheets("Cadastro_Clientes").Range("BS" & numero_linha).Value
TextBox32.Value = Sheets("Cadastro_Clientes").Range("BT" & numero_linha).Value
TextBox33.Value = Sheets("Cadastro_Clientes").Range("B" & numero_linha).Value
TextBox34.Value = Sheets("Cadastro_Clientes").Range("A" & numero_linha).Value
TextBox35.Value = Sheets("Cadastro_Clientes").Range("D" & numero_linha).Value
TextBox36.Value = Sheets("Cadastro_Clientes").Range("E" & numero_linha).Value
TextBox37.Value = Sheets("Cadastro_Clientes").Range("F" & numero_linha).Value
TextBox38.Value = Sheets("Cadastro_Clientes").Range("H" & numero_linha).Value
TextBox39.Value = Sheets("Cadastro_Clientes").Range("G" & numero_linha).Value
TextBox40.Value = Sheets("Cadastro_Clientes").Range("I" & numero_linha).Value
TextBox41.Value = Sheets("Cadastro_Clientes").Range("J" & numero_linha).Value
TextBox42.Value = Sheets("Cadastro_Clientes").Range("K" & numero_linha).Value
TextBox43.Value = Sheets("Cadastro_Clientes").Range("L" & numero_linha).Value
TextBox44.Value = Sheets("Cadastro_Clientes").Range("T" & numero_linha).Value
TextBox45.Value = Sheets("Cadastro_Clientes").Range("N" & numero_linha).Value
TextBox46.Value = Sheets("Cadastro_Clientes").Range("P" & numero_linha).Value
TextBox47.Value = Sheets("Cadastro_Clientes").Range("Z" & numero_linha).Value
TextBox48.Value = Sheets("Cadastro_Clientes").Range("R" & numero_linha).Value
TextBox49.Value = Sheets("Cadastro_Clientes").Range("S" & numero_linha).Value
TextBox50.Value = Sheets("Cadastro_Clientes").Range("X" & numero_linha).Value
TextBox51.Value = Sheets("Cadastro_Clientes").Range("AD" & numero_linha).Value
TextBox52.Value = Sheets("Cadastro_Clientes").Range("AE" & numero_linha).Value
TextBox53.Value = Sheets("Cadastro_Clientes").Range("AF" & numero_linha).Value
TextBox54.Value = Sheets("Cadastro_Clientes").Range("AG" & numero_linha).Value
TextBox55.Value = Sheets("Cadastro_Clientes").Range("AH" & numero_linha).Value
TextBox56.Value = Sheets("Cadastro_Clientes").Range("AI" & numero_linha).Value
TextBox57.Value = Sheets("Cadastro_Clientes").Range("AJ" & numero_linha).Value
TextBox58.Value = Sheets("Cadastro_Clientes").Range("AK" & numero_linha).Value
TextBox59.Value = Sheets("Cadastro_Clientes").Range("AL" & numero_linha).Value
TextBox60.Value = Sheets("Cadastro_Clientes").Range("AM" & numero_linha).Value

Voce pode trocar TUDO isso que está escrito por algo do genero:
Estou ignorando o fato que há saltos entre números tpo Textbox 15 para Textbox 21, nesses casos ou vc faz da maneira que fez ou você faz outro FOR NEXT

For i = 15 to 60
Controls("Textbox" & i).value = Sheets("Cadastro_Clientes").Offset(0,i+1) 'oq fiz aqui é, quando o TEXTBOX & i = 15 o meu offset(0,16), estou assumindo que voce está descendo a coluna A entao seu offset trará o valor da coluna Q. No proximo textbox16 trará o valor da coluna R "offset(0,17)" assim por diante, isso vc precisa ajustar de acordo com oq pretende.
Next i

Pelo oq entendi vc esta populando as Textbox em sequencia com valores advindos de colunas sequenciais, se for isso essa maneira é mais "elegante" e evita copy paste.

 
Postado : 25/06/2013 3:03 pm