Ir ao conteúdo
  • Cadastre-se

Outro Código VBA - Erro em tempo de execução '91'


Posts recomendados

Bom dia caros!

De ante mão, peço desculpas se abri esse tópico no local errado, sou novato na área.

 

Galera, preciso muito da ajuda de vcs, recebi uma missão para ser "mecânico de excel/vba", que é arrumar o código de outros, porém meu conhecimento em programação VBA ainda é raso, estou em processo de capacitação, e me deparei com o seguinte erro - "Erro em tempo de execução '91': A variável do objeto ou o a variável do bloco 'With' não foi definida" - infelizmente por falta de conhecimento eu não consigo corrigir esse erro e colocar a macro para rodar de novo.

 

    '2.1. Propostas Recebidas
    'Localiza coluna Complementar
    wsCompl.Activate
    Rows(1).Select
    vInd = "Prop Entrada"
    Selection.Find(What:=vInd, LookIn:=xlFormulas).Select
    cCompl = Selection.Column 'Coluna
    'Posição Destino
    vInd = "Propostas Recebidas"
    wsDest.Activate
    Columns(3).Select
    Selection.Find(What:=vInd, LookIn:=xlFormulas).Select
    lDest = Selection.Row 'Linha
    'Posição Origem
    vInd = "Entradas"
    wsOrig.Activate
    Columns(1).Select
    vAno = Format(vRef, "yyyy")
    Selection.Find(What:=vAno, LookIn:=xlFormulas).Select
    Range(Cells(Selection.Row, 1), Cells(Selection.End(xlDown).Row, 1)).Select
    Selection.Find(What:=vInd, LookIn:=xlFormulas).Select
    lOrig = Selection.Row 'Linha
    'Posição Complementar
    vInd = Format(vRef, "yyyymm") & "_AUTO - SANTANDER"
    wsCompl.Activate
    Columns(15).Select
    Selection.Find(What:=vInd, LookIn:=xlValues).Select ' <<<< O Pau dá nessa linha aqui
    lCompl = Selection.Row 'Linha
    'Atualiza Indicador
    wsDest.Cells(lDest, cDest).Formula = "=" & wsOrig.Cells(lOrig, cOrig) & "+" & wsCompl.Cells(lCompl, cCompl)

Enfim, desde já agradeço se alguém conseguir me ajudar a colocar esse "Carro" para andar de novo.

Link para o comentário
Compartilhar em outros sites

Seja bem vindo, @Igor Brenner !

 

Onde está o restante do código? (Sub...End Sub etc)

 

Mas se o erro aponta para a linha que você indicou, provavelmente é porque o método Find não encontrou nada do que se esperava encontrar (conteúdo de vInd) na coluna 15.

 

Não encontrando nada, retorna Nothing mas você manda selecionar (método Select) esse Nothing, o que dá erro.

 

Para ilustrar, faça um teste com o código abaixo e veja que o erro é o mesmo:

 

Sub Teste()
  Dim rg As Range
  Set rg = Nothing
  rg.Select
End Sub

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

  • 4 anos depois...

@Edson Luiz Branco Selection.Find(What:="102", After:=ActiveCell, LookIn:=xlFormulas, _
        LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
        MatchCase:=False, SearchFormat:=False).Activate

 

o scrip acima está procurando o n 102, quando ele não acha ele dar erro 91. Preciso : quando não encontrar 102 saia do sub. Como escrever isso?

acho que seria assim, mas não funciona:  

If Not Selection.Find Then
        Exit Sub
        End If

 

Agradeço ajudar. Muito obrigado 

Link para o comentário
Compartilhar em outros sites

@Midori coloquei desse jeito e ainda da outro erro 424 obketo é obrigatorio:

Sub vamp_()
Dim Procura As Range
Application.ScreenUpdating = False

Dim linha As Double
Dim x, ucel

Sheets("Migo").Select
    
ucel = Sheets("Migo").Cells(100000, 1).End(xlUp).Row
For x = 2 To ucel

Range("a1:f1").Select
Rows(1).AutoFilter

'========================================= Busca 102
Range("A2").Select
  Set Procura = Range(Selection, Selection.End(xlDown)).Select
                Selection.Find(What:="102", After:=ActiveCell, LookIn:=xlFormulas, _
                LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
                MatchCase:=False, SearchFormat:=False).Activate
        
If Procura Is Nothing Then
    Exit Sub
End If

finda.Iniciar.png

@Midori agora arrumado, mas mesmo assim não funciona 

hhhhhIniciar.png

Link para o comentário
Compartilhar em outros sites

@MidoriMuito obrigado @Midori, agora deu certo. vocês são excelentes

17 minutos atrás, Midori disse:

@levi feirreira Remova o .Activate da atribuição.

o Activate, seria esta a definição para o caso acima ?

 

O Activate ativa uma planilha específica; o Select seleciona uma ou mais. O Activate só pode ser aplicado a uma única Sheet enquanto o Select permite selecionar mais de uma, por exemplo. Às vezes temos várias planilhas no Select, usamos o Activate para deixar que uma delas seja a única Ativa entre as selecionadas.

 

Obrigado

Link para o comentário
Compartilhar em outros sites

@levi feirreira Activate é uma função, membro de Range. Com TypeName verá que é do tipo Boolean, p.ex,

 

MsgBox TypeName([A1].Activate)

 

Por isso ela não deve fazer parte da atribuição de Procura que é uma variável do tipo Range. É diferente de Find que é um objeto Range e Procura recebe o retorno dela que pode ser Range ou Nothing.

 

Caso o retorno de Find seja diferente de Nothing você pode usar qualquer membro de Range como o Activate, p.ex,

 

Call Procura.Activate

 

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...