Καλησπέρα
Δημήτρη, για να δεις τι συμβαίνει, αρίθμησε τις γραμμές στη στήλη I από 1 έως 30.
Εφαρμόζοντας ακολούθως τον κώδικα θα δεις ότι δεν διαγράφονται οι γραμμές 21, 23, 25, 27, και 29. Γιατί;
Όταν διαγράφεται μία γραμμή οι από κάτω γραμμές μετακινούνται μία γραμμή προς τα πάνω
Όταν διαγράφεται η 20 οι από κάτω γραμμές μετακινούνται προς τα πάνω και συνεπώς η 21 γίνεται 20, 22 γίνεται 21 και τελικά η 30 γίνεται 29.
Όταν ο κώδικας διαγράφει μια άλλη γραμμή έχουμε πάλι μετακίνηση και νέα αρίθμηση.
Αποτέλεσμα: Κάθε γραμμή που παίρνει τη θέση της διαγραμμένης, δεν εξετάζεται από τον κώδικα και δεν διαγράφεται.
Για να αντιμετωπιστεί το πρόβλημα, ο κώδικας θα πρέπει να διαγράφει τις γραμμές, από κάτω προς τα πάνω.
Αυτό κάνει ο παρακάτω κώδικας:
Κώδικας:
Sub DeleteRowIfCellBlank1()
Dim Cell As Range, i As Long
For i = Range("A1:A30").Rows.Count To 1 Step -1
Set Cell = Range("a1:a30")(i)
If Cell.Value = "" Then Cell.EntireRow.Delete
Next
End Sub