Εμφάνιση ενός μόνο μηνύματος
  #2  
Παλιά 07-03-21, 22:22
kapetang Ο χρήστης kapetang δεν είναι συνδεδεμένος
Όνομα: Γιώργος
Έκδοση λογισμικού Office: Ms-Office 2010
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική
 
Εγγραφή: 18-06-2010
Μηνύματα: 3.674
Προεπιλογή

Καλησπέρα

Δημήτρη, για να δεις τι συμβαίνει, αρίθμησε τις γραμμές στη στήλη 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
Απάντηση με παράθεση