Θέμα: VBA Φίλτρο

Εμφάνιση ενός μόνο μηνύματος
  #2  
Παλιά 14-09-11, 11:53
Το avatar του χρήστη Tasos
Tasos Ο χρήστης Tasos δεν είναι συνδεδεμένος
Διαχειριστής
Όνομα: Τάσος Φιλοξενιδης
Έκδοση λογισμικού Office: Ms-Office 365
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική, Γερμανική
 
Εγγραφή: 21-10-2009
Μηνύματα: 2.035
Προεπιλογή

Μάρω καλημέρα!

Kατά το φιλτράρισμα η Excel δεν εκτελεί κάποιο συμβάν τύπου ""OnAutoFilter" όπου θα μπορούσες να προσθέσεις κώδικα.

Μπορεί να εκτελέσει όμως το συμβάν Worksheet_Calculate() αν στο φύλλο υπάρχουν τύποι
που χρειάζονται συνεχώς νέο υπολογισμό όπως πχ.συναρτήσεις ημερομηνίας.

Στη λειτουργική μονάδα κλάσης του φύλλου πέρασε τον κώδικα:

Κώδικας:
Option Explicit
Private IsCalculating As Boolean

Private Sub Worksheet_Calculate()
    If IsCalculating Then
        IsCalculating = False
        Exit Sub
    End If
    IsCalculating = True
    On Error GoTo ErrH
    Dim rng As Range, c As Range
    If ActiveSheet.AutoFilterMode Then
        If ActiveSheet.AutoFilter.Range.Columns(1) _
                .SpecialCells(xlCellTypeVisible).Count > 1 Then
            Set rng = ActiveSheet.AutoFilter.Range
            Set rng = rng.Offset(1).Columns(1)
            For Each c In rng.SpecialCells(xlCellTypeVisible)
                If c <> vbNullString Then
                    Me.Range("D1") = c ' Προσάρμοσε το αν χρειαστεί
                    Exit For
                End If
            Next
        End If
    End If
ErrH:
    If Err Then IsCalculating = False
End Sub
Αν δεν σου εμφανίζεται το αποτέλεσμα, θα πρέπει να προσθέσεις κάπου σε ένα κελί του φύλλου τον τύπο =NOW() για να προκαλείται υπολογισμός κατά το φιλτράρισμα και κατά συνέπεια η εκτέλεση του Worksheet_Calculate().

Αν εφαρμόζεις φίλτρο μόνο τη στήλη B, θα σου πρότεινα να χρησιμοποιήσεις σε ένα κελί τον παρακάτω τύπο CSE:

Κώδικας:
=INDEX(A:A;MATCH(INDEX(B:B;MAX(SUBTOTAL(3;INDIRECT("B"&ROW(2:999)))*ROW(2:999)));B:B;0))
Καλή συνέχεια!

Φιλικά

Τάσος
__________________
Ms-Office Development Team
Ανάπτυξη επαγγελματικών εφαρμογών
Απάντηση με παράθεση