ms-office.gr > Forum > Microsoft Excel > Excel - Ερωτήσεις / Απαντήσεις > [VBA] Autofilter excel 2002 και διαφορές με 2007?

Excel - Ερωτήσεις / Απαντήσεις Ότι έχει σχέση με συναρτήσεις, μορφοποίηση, εκτυπώσεις γραφήματα κτλ.

Απάντηση στο θέμα

 

Εργαλεία Θεμάτων Τρόποι εμφάνισης
  #1  
Παλιά 20-06-11, 09:06
Όνομα: Νίκος
Έκδοση λογισμικού Office: Ms-Office 2010, Ms-Office 2013
Γλώσσα λογισμικού Office: Ελληνική
 
Εγγραφή: 10-05-2011
Περιοχή: Χαλκίδα
Μηνύματα: 26
Προεπιλογή Autofilter excel 2002 και διαφορές με 2007?

Καλημέρα παιδιά,

θα χρειαστώ για άλλη μια φορά τη βοήθεια σας.

Έχω φτιάξει κάποιες μακροεντολές σε excel 2002 SP3 και δουλεύουν μια χαρά. Όταν πήγα όμως να τις τρέξω σε 2007 αντιμετώπισα το εξής πρόβλημα.

Χρησιμοποιώ τον παρακάτω κώδικα για να σβήσω γραμμές, που σε μια στήλη τους έχουν το "ο" (=όχι")

Κώδικας:
    With Sheets(1)
    LastRow = .Range("C3").End(xlDown).Row 'Έυρεση τελευταίας γραμμής με περιεχόμενο
    .Range("C3:C" & LastRow).EntireRow.Select
    End With
    Selection.Sort Key1:=Range("F3"), Order1:=xlAscending, Header:=xlGuess, _
        OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
        DataOption1:=xlSortNormal
    
    Rows("2:2").Select 'Η τίτλοι των στηλών είναι στην γραμμή 2
    Selection.AutoFilter
    Selection.AutoFilter Field:=6, Criteria1:="o" 'Το κριτήριο μου είναι στην στήλη 6
    With Sheets(1)
    LastRow = .Range("a3").End(xlDown).Row 'Επιλογή των γραμμών προς διαγραφή
    .Range("a3:a" & LastRow).EntireRow.Select
    End With
    Selection.Delete Shift:=xlUp 'Διαγραφή γραμμών
    
    Selection.AutoFilter Field:=6 'Επαναφορά φίλτρου
    Selection.AutoFilter 'Αφαίρεση φίλτρου
    Range("A1").Select
Απ'οτι καταλαβαίνω το φίλτρο λειτουργεί διαφορετικά στις δύο εκδόσεις. Στο 2002 με την επιλογή των γραμμών μαζικά, επιλέγει μόνο όσες βλέπει στο φίλτρο και τις διαγράφει. Στο 2007 όμως αν και στο φίλτρο φαίνονται μόνο οι επιλογές με "ο", όταν γίνεται το μαρκάρισμα επιλέγει όλες τις γραμμές και τις διαγράφει!

Υπάρχει κάποιος τρόπος επιλογής μόνο όσων φαίνονται στο φίλτρο ή να τις σβήσω με άλλον τρόπο? (πχ με κάποια if ελέγχοντας όλες τις γραμμές μια μια)...

Ευχαριστώ!
Απάντηση με παράθεση
  #2  
Παλιά 20-06-11, 10:04
Όνομα: Νίκος
Έκδοση λογισμικού Office: Ms-Office 2010, Ms-Office 2013
Γλώσσα λογισμικού Office: Ελληνική
 
Εγγραφή: 10-05-2011
Περιοχή: Χαλκίδα
Μηνύματα: 26
Προεπιλογή

Το βρήκα μάλλον παιδιά!

Κώδικας:
Rows("2:2").Select
    Selection.AutoFilter
    Selection.AutoFilter Field:=6, Criteria1:="o"
    Application.DisplayAlerts = False
    ActiveSheet.UsedRange.Offset(2, 0).Resize(ActiveSheet.UsedRange.Rows.Count - 1, 1). _
            SpecialCells(xlCellTypeVisible).EntireRow.Delete
    Application.DisplayAlerts = True
Λογικά θέλει το SpecialCells για να επιλέξει κ να διαγράψει μόνο τις φιλτραρισμένες γραμμές...
Απάντηση με παράθεση
  #3  
Παλιά 20-06-11, 10:50
Το avatar του χρήστη Tasos
Διαχειριστής
Όνομα: Τάσος Φιλοξενιδης
Έκδοση λογισμικού Office: Ms-Office 365
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική, Γερμανική
 
Εγγραφή: 21-10-2009
Μηνύματα: 2.250
Προεπιλογή

Καλημέρα Νίκο!
Ο κώδικας που αναφέρεις είναι σωστός και προφανώς σε εξυπηρετεί.

Αν όμως υποτεθεί ότι υπάρχουν δεδομένα εκτός περιοχής φίλτρου αυτά θα διαγραφούν αν δεν περιορίσεις την περιοχή προς διαγραφή στα πλαίσια του φίλτρου.

Σε τέτοιες περιπτώσεις δεν εξυπηρετεί το "UsedRange".

Θα πρέπει να χρησιμοποιηθεί το "AutoFilter.Range"

Για παράδειγμα:

Κώδικας:
Sub test()
    Dim rng As Range

      Sheet1.Range("$A$2:$K$100").AutoFilter Field:=6, Criteria1:="o" ' Sheet1 = Το κωδικό όνομα του φύλλου

      Set rng = Sheet1.AutoFilter.Range
      Set rng = rng.Offset(1).Resize(rng.Rows.Count - 1, 1)
      'δημιουργεί μια περιοχή από την δεύτερη γραμμή του φίλτρου μέχρι την τελευταία.

      If rng.Count > 0 Then rng.SpecialCells(xlCellTypeVisible).EntireRow.Delete 
      'Αν δεν υπάρχουν ορατά κελιά στη φιλτράρισμένη περιοχή "rng", η SpecialCells() θα επιστρέψει σφάλμα.
      Set rng = Nothing
End Sub
Φιλικά
Τάσος
__________________
Ms-Office Development Team
Ανάπτυξη επαγγελματικών εφαρμογών
Απάντηση με παράθεση
  #4  
Παλιά 20-06-11, 11:39
Όνομα: Νίκος
Έκδοση λογισμικού Office: Ms-Office 2010, Ms-Office 2013
Γλώσσα λογισμικού Office: Ελληνική
 
Εγγραφή: 10-05-2011
Περιοχή: Χαλκίδα
Μηνύματα: 26
Προεπιλογή

Α, άψογο! Στην ουσία αυτό ήθελα, επιλογή μόνο των τιμών του AutoFilter και προφανώς το AutoFilter.Range είναι πιο ασφαλές!

Σ'ευχαριστώ πάρα πολύ Τάσο!
Απάντηση με παράθεση
Απάντηση στο θέμα


Δικαιώματα - Επιλογές
Δε μπορείτε να δημοσιεύσετε νέα μηνύματα
Δε μπορείτε να δημοσιεύσετε απαντήσεις
Δεν μπορείτε να επισυνάψετε αρχεία
Δεν μπορείτε να επεξεργαστείτε τα μηνύματα σας

Ο κώδικας ΒΒ είναι σε λειτουργία
Τα Smilies είναι σε λειτουργία
Ο κώδικας [IMG] είναι σε λειτουργία
Ο κώδικας HTML είναι εκτός λειτουργίας
Trackbacks are εκτός λειτουργίας
Pingbacks are εκτός λειτουργίας
Refbacks are εκτός λειτουργίας


Παρόμοια Θέματα

Θέμα Δημιουργός Forum Απαντήσεις Τελευταίο Μήνυμα
[Excel07] Διπλότυπα σε αναδυόμενη λίστα στο excel 2007 vasilis999 Excel - Ερωτήσεις / Απαντήσεις 6 06-11-15 10:08
[Γενικά] Συμβατότητα από excel 2007 σε excel 2013 gfevran Excel - Ερωτήσεις / Απαντήσεις 2 12-04-14 11:01
Mετατροπή βάσης απο 2007 σε 2003,2002 κλπ alex Access - Ερωτήσεις / Απαντήσεις 2 23-10-11 18:32
[ Ερωτήματα ] Διαφορές μεταξύ Excel και Access SOS xristos0718 Access - Ερωτήσεις / Απαντήσεις 5 10-03-10 13:42
Αντιγραφή / μεταφορά δεδομένων Access 2007 σε Excel 2007 Galileo Ms-Office 8 27-01-10 23:23


Η ώρα είναι 18:59.