Wagner, há uma falha de lógica no seu código...
É o seguinte... se o loop está contando de 1 em 1, e apagar por exemplo a linha 9, todas as linhas sobem, e a 10 passa a ser 9, porém no seu loop a linha seguinte a ser testada é a 10, a nova linha 10. Ou seja, a linha 10 original, que agora está posicionada na linha 9, não será testada e se tiver um 0 ali ela será mantida.
Neste caso, eu sugeriria a seguinte mudança no seu código:
Sub ApagarZeros()
Dim UltimaLinha As Long
Dim i As Long
UltimaLinha = Sheets("Book").Cells(Cells.Rows.Count, 11).End(xlUp).Row
For i = 9 To UltimaLinha
If Range("K" & i).Value = 0 Then
Rows(i & ":" & i).Delete Shift:=xlUp 'eliminar o select e o selection
i = i-1
End If
Next
Range("A8").Select
End Sub
Joana, não sei pq vc usa o .Select e depois varre todas as células do used range... eu faria assim:
Sheets("Book").Select
For Each cell In Sheets("Book").Range("K9:K" & linha)
If cell.Value = "0" or cell.Value = 0 Then cell.EntireRow.Delete
Next cell
Se quiser tentar com o .Value ao invés do .Value2, é melhor...
*não sei quem te indicou usar o Value2, mas evite ao máximo.
O Value2 é mais simlpes que o Value e por isso, uns 2% mais rápido, mas não identifica todos os tipos de dados nas células o que pode causar problemas de execução...
Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel
Postado : 04/02/2015 7:23 am