Notifications
Clear all

Procv no Vba não Retorna o Valor

35 Posts
2 Usuários
0 Reactions
9,796 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
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Bom dia!!

Tente..

TextBox2 = Application.WorksheetFunction.VLookup(CDbl(TextBox1), Plan3.Range("A1:B15"), 2, 0)

Att

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

Alexandre bom dia
cara testei mais não deu certo
TxtContrato= Application.WorksheetFunction.VLookup(CDbl(CbContratante1), Plan28.Range("A1:I15"), 1, 0)

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

Como está Declarada a Variável "CbContratante1" ?

tente :

Dim CbContratante1 As String

On Error Resume Next
sVr = Application.WorksheetFunction.VLookup(CDbl(CbContratante1), Worksheets("Plan28").Range("A2:I1000"), 2, 0)

TxtContrato = sVr
 
Postado : 21/03/2012 8:10 am
(@m_araujo)
Posts: 159
Estimable Member
Topic starter
 

Bom dia Mauro
Cara o CbContratante1 não é ma Variavel ele é um ComBox
que carrega o nome das pessoas referente ao contrato
entende

 
Postado : 21/03/2012 8:13 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Então defina uma variável para o valor do Combo e faça o teste :

Dim sbContratante1 As String

sContratante1 = CbContratante1.Value

On Error Resume Next
sVr = Application.WorksheetFunction.VLookup(CDbl(sContratante1), Worksheets("Plan28").Range("A2:I1000"), 2, 0)

TxtContrato = sVr
 
Postado : 21/03/2012 8:25 am
(@m_araujo)
Posts: 159
Estimable Member
Topic starter
 

Mauro meu caro
boa tarde!!
Eu devo ta fazendo algo de muito errado nao retornou o valor da coluna 1 nem que a vaca turça
segue o codigo

Private Sub CbContratante1_Change()
Dim StrContratante As String

StrContratante = CbContratante1.Value
On Error Resume Next
Svr = Application.WorksheetFunction.VLookup(CLng(StrContratante), Workbooks("Contratos").Range("A2:I100"), 1, 0) ' Obs o valor a ser procurado esta na Coluna A2 
TxtContrato = Svr

At.
Araujo

 
Postado : 21/03/2012 9:13 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

araujo, como temos a instrução que enibe o erro, mas acredito ser em :

Workbooks("Contratos") - Não seria : Worksheets("Contratos")
Workbooks é uma coisa e Worksheets outra

utilize um msgbox para saber qual o valor está retornando.

msgbox Svr

[]s

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

nada cara segue em anexo a planilha Mauro

 
Postado : 21/03/2012 10:51 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

No editor VBE abra a caixa de verificação imediata (Ctrl +G) e cole o código abaixo (copie daqui mesmo e acrescentei os "Debug.Print"s para ver as mensagens dos possíveis erros.

Dim sbContratante1 As String
On Error Goto fim
sContratante1 = CbContratante1.Value
Debug.Print sContratante1

sVr = Application.WorksheetFunction.VLookup(CDbl(sContratante1), Worksheets("Plan28").Range("A2:I1000"), 2, 0)
fim:
Debug.Print err.number & "" & err.Description
TxtContrato = sVr
 
Postado : 21/03/2012 10:59 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Baixei o anexo, mas tem algum objeto que não tenho instalado na minha maquina (no trabalho) e não permite eu visualizar o formulário. Olhei nas referencias no VBE e me parece que ele aponta para alguma aplicação que você deva usar aí.

Tente com o código que coloquei no post anterior.

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

Ola White boa tarde
obrigado por responder
cara fiz como me pedio mais nao resolvel
ai na Verificação imediata ele retorna a seguintes mensagens
ADM_2
13Tipos incompatíveis

13Tipos incompatíveis
ADM_2
13Tipos incompatíveis

13Tipos incompatíveis

o codigo eu fiz a seguinte
Dim sbContratante1 As String
On Error GoTo fim
sContratante1 = CbContratante1.Value
Debug.Print sContratante1

sVr = Application.WorksheetFunction.VLookup(CLng(sContratante1), Worksheets("Plan28").Range("A2:I1000"), 1, 0)
fim:
Debug.Print Err.Number & "" & Err.Description
TxtContrato = sVr

 
Postado : 21/03/2012 11:38 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Bom, o resultado da janela de verificação imediata era esse mesmo que eu queria que chegasse, ele reportou os erros que estão acontecendo.

A linha Debug.Print sContratante1 reportou ADM_2 que deve ser o valor que esta na combobox.

On Error GoTo fim forçou o procedimento ir até a linha fim: pois ocorreu um erro na linha do Vlookup e ela retorno erro de código 13 que significa tipos incompatíveis. Tire o CLng da linha do Vlookup e depois, com a linha em destaque aperte F9 para aparecer um ponto de interrupção. Execute de novo o procedimento. Quando a rotina parar em cima da linha com o ponto de interrupção aponte o mouse em cima da variável em destaque e veja o seu valor .

sVr = Application.WorksheetFunction.VLookup(sContratante1, Worksheets("Plan28").Range("A2:I1000"), 1, 0)

De o retorno do que aparece nessa linha.

 
Postado : 21/03/2012 4:56 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Baixei seu exemplo em casa, mas também está faltando algum objeto ou biblioteca, pois ele não deixa eu abrir o form "frmEntradadeSoja" 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")?

Ah... se puder ir no VBE, em ferramentas, referências e nos dizer quais estão marcadas aí, ajudaria para agente poder executar o form e ver a causa do erro com mais precisão.

 
Postado : 21/03/2012 5:20 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Araujo, o White tem razão quando diz :

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")?

A função PROCV retorna os Valores a Direita, e como você está procurando o respectivo a esquerda do valor procurado na Coluna C, desta forma não tem como retornar o Valor constante na Coluna B
Se alterar o Range para ("C2:I100"), não terá o valor de B:B, pode-se até ajustar a Function VLookup para buscar valores a esquerda, mas se aceitar uma sugestão, eu utilizaria a Function que disponibilizei no Forum para efetuar qq tipo de pesquisa, e é até mais simples de adaptar às nossas necessidades.

Ajustei a função e acordo com seu modelo, faça os testes com a mesma em seu arquivo e veja se surti o resultado esperado, se achar que não é isto, mais pra frente ajustarei a função PROCV para a situação que quer.

Na Declaração do Formulário, logo abaixo da linha :
Private Const NomePlanRelatorio As String = "Relatorio"
'Declare esta Variável
Dim sCel

Em seu ComboBox "CbContratante1", de dois cliques, e, altere para :

Private Sub CbContratante1_Change()

    Dim sbContratante1 As String
    
    sContratante1 = CbContratante1.Value
    
    sVal = ProcuraRefId(sContratante1)
    
    TxtContrato = sCel

End Sub

Neste mesmo Modulo coloque a função abaixo :

    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

[]s

 
Postado : 21/03/2012 7:24 pm
Página 1 / 3