Notifications
Clear all

Ajuste em Macro para Deleção de Linhas - VBA

9 Posts
2 Usuários
0 Reactions
1,981 Visualizações
(@chook)
Posts: 197
Reputable Member
Topic starter
 

Bom dia amigos,
estou com um problema, eu gero uma nova planilha para dela emitir relatórios. E para não haver perda ela seleciona de A1:Z65000 e copia. O que preciso é limpar as linhas em branco. Fiz a macro abaixo mas ela ao selecionar de baixo para cima, ela seleciona a última linha e deleta. O que preciso e que ela ao subir a seleção, depois baixe uma linha para não apagar os dados válidos.

Se não me expressei bem, da uma testada na planilha em anexo que vais entender.

Sub Macro1()
    ActiveCell.SpecialCells(xlLastCell).Select
    Rows("1048576:1048576").Select
    Range(Selection, Selection.End(xlUp)).Select
    Selection.Delete Shift:=xlUp
    Range("A1").Select
End Sub
 
Postado : 12/04/2012 8:37 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Experimente utilzar o codigo assim:

Sub Macro1()
lin = ActiveCell.SpecialCells(xlLastCell).Row
Rows(lin + 1 & ":1048576").Select
Selection.Delete Shift:=xlUp
 Range("A1").Select
End Sub
 
Postado : 12/04/2012 8:55 am
(@chook)
Posts: 197
Reputable Member
Topic starter
 

Bom dia Reinaldo,

o que fez funciona na planilha que enviei, mas na planilha que é pra funcionar mesmo, que é a que envio em anexo, não funciona. :(

Observe que se clicar em Crtl+end ela vai para a última célula (AB63225)

Esse lixo que desejo limpar e não sei o que é...

 
Postado : 12/04/2012 9:18 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Então altere o modo de "pegar" a linha

Sub Botão1_Clique()
        lin = Cells(Cells.Rows.Count, "A").End(xlUp).Row
                                   'lin = ActiveCell.SpecialCells(xlLastCell).Row
        Rows(lin + 1 & ":1048576").Select
        Selection.Delete Shift:=xlUp
        Range("A1").Select
End Sub
 
Postado : 12/04/2012 9:38 am
(@chook)
Posts: 197
Reputable Member
Topic starter
 

AAhhhhhh!!!

Continua sem funcionar!!

Pra saber se deu certo clica em Crtl+End que ela não pode ir para a célula (AB63225)

 
Postado : 12/04/2012 11:57 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Então deve ser limpo tb as colunas; Veja o que diz o grande JLM (ExcelBR)

RES: [ExcelBr] ultima celula preenchida

Quando o Ctrl+End não para na última célula da tabela, é porque alguém escreveu além do intervalo da mesma e depois apagou.

Esta ou estas células cujos dados foram apagados, são chamadas de células fantasma.

Ou seja, não existem valores lá, mas o Excel considera como parte dos dados.

Para eliminar as células fantasmas, selecione as linhas e/ou colunas em branco e exclua-as.

Em seguida, salve a pasta de trabalho.

Agora teste o Ctrl+End e verás que ele funciona.

[ ]’s fantasmagóricos ;-))

JLM
Santo André – SP

Sub Botão1_Clique()
Dim lastColum As Integer, Lin As Long
    lastColum = Cells(1, Cells.Columns.Count).End(xlToLeft).Column
    Columns(lastColum + 1).Select
    Range(Selection, Selection.End(xlToRight)).Select
    Selection.Delete
    Lin = Cells(Cells.Rows.Count, "A").End(xlUp).Row
    Rows(Lin + 1 & ":1048576").Select
    Selection.Delete 'Shift:=xlUp
    Range("A1").Select
End Sub
 
Postado : 12/04/2012 1:00 pm
(@chook)
Posts: 197
Reputable Member
Topic starter
 

É isso mesmo, mas continua sem funcionar! :(

 
Postado : 12/04/2012 1:06 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Testei o codigo acima (modificado) no modelo que enviou e aqui funcionou.
Após "rodar" o codigo e teclar Ctrl+End vai para AB9

 
Postado : 12/04/2012 1:11 pm
(@chook)
Posts: 197
Reputable Member
Topic starter
 

:lol: Grande Reinaldo! Você está correto amigo!

A questão é que só funciona depois de salvar. Depois que executamos a rotina, e não salvamos ela se comporta da mesma forma. Mas quando salvamos depois de rodar a rotina, ai meu amigo!, funciona!!

Mistérios da Microsoft!

Parabéns!!

 
Postado : 12/04/2012 1:18 pm