Página 1 de 1

Função VLookup - erro 1004 - valor não encontrado

Enviado: 03 Mai 2017 às 09:33
por pedroddcunha
Bom dia,

Estou tentando fazer um macro que substitua certo valor.
Ele vai procurar este valor em outra tabela e retornar o valor que correspondente à ele.
Para isto, tenho duas planilhas (Plan1 e Plan2).
Na Plan1 tenho uma lista com 2 colunas. Em uma coluna estão os valores que poderão ser inseridos, e na coluna do lado estão os valores para os quais os valores previamente inseridos serão corrigidos.
E na Plan2 tenho a planilha onde entrarei com os valores e eles serão corrigidos conforme a tabela na Plan1.
Seguem 2 imagens (Plan1 e Plan2, respectivamente) para explicar melhor estas planilhas.
Imagem
Imagem

Caso não tenha ficado claro: eu insiro um valor na coluna A da Plan2; este valor é procurado na coluna A da Plan2 e retornado o valor ao lado na Coluna B desta Plan2.
Ela funciona corretamente com valores que estejam configurados. Se é procurado algum valor e não encontrado nenhum, dá o seguinte erro:
Erro em tempo de execução ‘1004’:
Erro de definição de aplicativo ou de definição de objeto.
O código é o seguinte:
Código: Selecionar todos
Public ILin As Long 'Variável de índice da qtde de valores

Public ILast As Long 'Variável que grava a qtde total de valores preenchidos
'Public ILast_final As Long 'Variável que grava a qtde total de valores ajustados preenchidos

Dim valor(1 To 4992) As String 'Variável que grava o valor

Function Conta_Linhas_Valor(area As Range) As Long 'Conta as linhas preenchidas em certa coluna
    Dim celula As Range, Total_Linhas_Diam As Long
    Total_Linhas_Diam = 0
    For Each celula In area
        If celula <> "" Then
            Total_Linhas_Valor = Total_Linhas_Valor + 1
        End If
    Next
    Conta_Linhas_Valor = Total_Linhas_Valor
End Function

Sub Substituir_valor() 'Substituir valores

ILast = Conta_Linhas_Valor(Worksheets("Plan2").Range("A8:A5000")) 'Conta as linhas preenchidas na coluna "Valor"
'ILast_final = Conta_Linhas_Valor(Worksheets("Plan2").Range("B8:B5000")) 'Conta as linhas preenchidas na coluna final Valor final

Set intervalo_ajuste = Worksheets("Plan1").Range("A1:B50") 'Invervalo para ajuste

For ILin = 1 To ILast
    'On Error Resume Next 'prossegue a leitura caso algum diâmetro esteja mal inserido
    valor(ILin) = Application.WorksheetFunction.VLookup(Cells(ILin + 7, "A").Value, intervalo_ajuste, 2, False)
    Worksheets("Plan2").Cells(ILin + 7, "B") = valor(ILin)
Next ILin

End Sub
Que forma de controle poderia ser feito para:
  • * Não executar o macro quando não for encontrado algum valor.
    * Aparecer uma mensagem informando o erro. Se possível, informando em qual linha está o erro.
E existe uma forma otimizar este meu código?


Obrigado.

Re: Função VLookup - erro 1004 - valor não encontrado

Enviado: 03 Mai 2017 às 13:33
por babdallas
Um pequeno exemplo de correção deste erro.
Código: Selecionar todos
Sub teste()

    On Error GoTo erro
    With Planilha1
        .Range("e1").Value = Application.WorksheetFunction.VLookup(.Range("d1").Value, .Range("base"), 2, 0)
    End With
    Exit Sub
    
erro:
    MsgBox "Dado não encontrado"

End Sub