Καλημέρα Γιώργο!
Για να ανακεφαλαιώσουμε...
Το ζητούμενο σου όπως εξελίχθηκε μέσα από τη συζήτηση είναι:
Τα δεδομένα της τελευταίας χρησιμοποιημένης γραμμής (ας πούμε
πηγή) να αντιγράφονται στην πρώτη ελεύθερη γραμμή
όπου κι αν βρίσκεται αυτή δηλ.
πριν ή
μετά την
πηγή.
Αν μέχρι εδώ συμφωνούμε τότε ο κώδικας διαμορφώνεται έτσι:
Κώδικας:
Sub CopyLastRow()
Dim FirstFreeLine As Range, LastLine As Range
With Range("Table")
If Trim(.Cells(1)) <> vbNullString Then
Set FirstFreeLine = .Cells(1).Offset(-1).End(xlDown).Offset(1).Resize(1, .Columns.Count)
Else
Set FirstFreeLine = .Cells(1).Resize(1, .Columns.Count)
End If
Set LastLine = .Offset(.Rows.Count + 1).End(xlUp).Resize(1, .Columns.Count)
If FirstFreeLine.Row <> LastLine.Row And FirstFreeLine.Row <= .Rows(.Rows.Count).Row Then
FirstFreeLine.Value = LastLine.Value
'LastLine.ClearContents ' Διαγραφει την τελευταία γραμμή
FirstFreeLine.Resize(1, 1).Offset(, .Columns.Count - 1).Select ' ή .ClearContents
'SendKeys "{F2}" ' φέρνει το κελί σε κατάσταση επεξεργασίας
End If
End With
End Sub
για να καλύπτει και τις δύο περιπτώσεις.
Τις γραμμές LastLine.ClearContents και SendKeys "{F2}" δεν τις ενεργοποίησα γιατί δεν μπορώ να γνωρίζω αν θα χρησίμευαν στο παρόν σενάριο.
Δεν έχει σημασία το ότι είσαι αρχάριος στην
VBA.
Κάθε διόρθωση, απάντηση, σχόλιο από τα μέλη μας είναι ευπρόσδεκτη!
Δεν υπάρχουν συντακτικά ή προγραμματιστικά λάθη στους κώδικες που παρουσιάστηκαν στο θέμα αυτό από τον Γιάννη κι από μένα.
Υπάρχουν λογικά λάθη που οφείλονται στη λανθασμένη κατανόηση του ζητούμενου.
Μετά από πείρα 15 χρόνων στο χώρο, έμαθα ότι η σωστή περιγραφή ενός προβλήματος παίζει καθοριστικό ρόλο στη λύση του.
Καλή σου μέρα και καλή συνέχεια!
Φιλικά
Τάσος