Este fórum está sendo desativado

Depois de 9 anos, este fórum será desativado. Mas calma.... estamos migrando para uma comunidade no DISCORD. Junte-se a nós.

ENTRAR PARA DISCORD

Tópicos relacionados a códigos VBA, gravação de macros, etc.
#22781
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.
Você não está autorizado a ver ou baixar esse anexo.
#22786
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
long long title how many chars? lets see 123 ok more? yes 60

We have created lots of YouTube videos just so you can achieve [...]

Another post test yes yes yes or no, maybe ni? :-/

The best flat phpBB theme around. Period. Fine craftmanship and [...]

Do you need a super MOD? Well here it is. chew on this

All you need is right here. Content tag, SEO, listing, Pizza and spaghetti [...]

Lasagna on me this time ok? I got plenty of cash

this should be fantastic. but what about links,images, bbcodes etc etc? [...]

Estamos migrando para uma comunidade no Discord