Notifications
Clear all

ERROR 424: Objeto Inválido

9 Posts
3 Usuários
0 Reactions
1,813 Visualizações
(@davinunes)
Posts: 12
Active Member
Topic starter
 

Boa tarde,
Pessoal estou fazendo uma rotina para padronizar todo relatório retirado de um sistema, o código que fiz está funcionando, porém, no final ele da o erro 424, já depurei várias vezes, mas não entendo do pq dele no final na última ação a variável "Ultcel" fica como objeto inválido e acontece o erro, não entendo muito de vb, sou apenas mais um curioso fazendo as doideras da vida pra conseguir aprender, já pesquisei em tudo quanto eh canto, mas não esclarecem o erro.

Necessito desta solução, pois ainda irei continuar esse código com as questões de formatação, mas com esse erro ocorrendo no meio, não dá, pois o processo é abortado.

Private Sub CommandButton1_Click()
Dim UltCel As Range
Dim W As Worksheet
Dim Cod As Variant

Set W = Sheets("Plan1")
Set UltCel = W.Range("A1048576").End(xlUp)

W.Select
W.Range("a7").Select
W.Range("l6").Value = "Supervisor"

Do While ActiveCell.Row <= UltCel.Row
    Do While ActiveCell.Value <> ""
        If ActiveCell.Value = "Representante:" Then
            Cod = ActiveCell.Offset(0, 1).Value
            ActiveCell.EntireRow.Delete
            Exit Do
        Else
            If ActiveCell.Value = "NFE" Then
                ActiveCell.Offset(0, 11).Value = Cod
                ActiveCell.Offset(1, 0).Select
                Exit Do
            Else
                ActiveCell.EntireRow.Delete
            End If
        End If
    Loop
    
    If ActiveCell.Value = "" Then
        ActiveCell.EntireRow.Delete
        If ActiveCell.Row > UltCel.Row Then
            Exit Do
        End If
    End If
Loop

End Sub
 
Postado : 09/06/2016 1:23 pm
(@mprudencio)
Posts: 2749
Famed Member
 

Tenta assim


Set UltCel = W.Range("A1048576").End(xlUp).Row

Marcelo Prudencio
Microsoft Excel Brasil no Facebook

"Começar já é a metade do caminho."
Autor Desconhecido

Simplifica que simples fica.
Nicole Tomazella.

"O Simples é Sempre Melhor Que o Complicado"
Jorge Paulo Lemann.

 
Postado : 09/06/2016 1:53 pm
(@davinunes)
Posts: 12
Active Member
Topic starter
 

Tenta assim


Set UltCel = W.Range("A1048576").End(xlUp).Row

Não dá, pois dessa forma ele fica como "Tipo Incompatível".

 
Postado : 09/06/2016 2:02 pm
(@mprudencio)
Posts: 2749
Famed Member
 

Rodei seu codigo naa planilha 5 vezes nao deu erro nenhum

As unicas alterações que sugiro é colocar no inicio do codigo apos declarar as variaveis

Application.ScreenUpdating = False

E isso apos loop antes de end sub

W.Range("a7").Select

Application.ScreenUpdating = True

Marcelo Prudencio
Microsoft Excel Brasil no Facebook

"Começar já é a metade do caminho."
Autor Desconhecido

Simplifica que simples fica.
Nicole Tomazella.

"O Simples é Sempre Melhor Que o Complicado"
Jorge Paulo Lemann.

 
Postado : 09/06/2016 2:30 pm
(@davinunes)
Posts: 12
Active Member
Topic starter
 

Estranho, pois é como eu disse o código está funcionando, porém quando ele mexe na última linha a variável se perde e da erro. porém se vc executar esse código mais uma vez, ele roda liso.

Mas obrigado, vou testar em outra máquina mais além.

 
Postado : 09/06/2016 2:35 pm
(@davinunes)
Posts: 12
Active Member
Topic starter
 

Sim, o screenupdate já esta planejado, só não o fiz, pois queria ver como estava se comportando.

 
Postado : 09/06/2016 2:40 pm
(@mprudencio)
Posts: 2749
Famed Member
 

Tente isso entao


UltCel = W.Range("A" & Rows.Count).End(xlUp).Row

Pode ser que o "erro" inicial nao ocorra.

Marcelo Prudencio
Microsoft Excel Brasil no Facebook

"Começar já é a metade do caminho."
Autor Desconhecido

Simplifica que simples fica.
Nicole Tomazella.

"O Simples é Sempre Melhor Que o Complicado"
Jorge Paulo Lemann.

 
Postado : 09/06/2016 2:45 pm
(@osvaldomp)
Posts: 858
Prominent Member
 

... porém quando ele mexe na última linha a variável se perde e da erro. ...

É exatamente aí o erro. O código exclui a linha que aloja a variável declarada como Range então a variável se escoa e aí o comando UltCel.Row não consegue mais capturar o número da linha.

Faça um teste, interrompa o código antes de ele excluir a última linha. Acrescente a segunda linha abaixo no seu código que irá preservar o valor de UltCel e assim evitará o erro.

    Do While ActiveCell.Value <> ""
        If ActiveCell.Row = UltCel.Row Then Exit Sub
        If ActiveCell.Value = "Representante:" Then

Por outro lado o seu código tem um erro conceitual pois o "Loop" que exclui linhas atua de cima para baixo na planilha, em consequência, algumas células não são analisadas pelo código. O correto é o "Loop" que exclui linhas atuar de baixo para cima.
Sugiro que você tente reescrevê-lo, declare UltCel como Integer ou como Long e atribua a essa variável a linha e não o intervalo, e faça uma rotina sem utilizar o comando Select.

Osvaldo

 
Postado : 09/06/2016 3:39 pm
(@davinunes)
Posts: 12
Active Member
Topic starter
 

Osvaldo, muito obrigado pelo apoio, apenas substitui o "Exit sub" por "Do"pois ainda tenho que continuar esse código, e acrescentei este mesmo "If" pra quando achar a vazia,
Agora com relação a não utilizar o Select, pra min é quase impossível, sei que possível fazer, porém como pode ver no código meu conhecimento em vba é muito pouco e muito simples, aprendendo nos youtubes da vida, então me viro no que sei kkkkkkkkkkkk, tenho trabalho em fazer minhas rotinas, mas até o momento tem dado certo, no que eu perderia dias fazendo, faço em 1 minuto(Santo excel, como gosto disso kkkkkkkk).

 
Postado : 10/06/2016 6:07 am