Forum

Forum (https://www.ms-office.gr/forum/)
-   Excel - Ερωτήσεις / Απαντήσεις (https://www.ms-office.gr/forum/excel-erotiseis-apantiseis/)
-   -   [VBA] Αυτόματο Φίλτρο Χωρίς DropDown menu (https://www.ms-office.gr/forum/excel-erotiseis-apantiseis/1255-aytomato-filtro-xoris-dropdown-menu.html)

mak 07-07-11 19:46

Αυτόματο Φίλτρο Χωρίς DropDown menu
 
1 Συνημμένο(α)
Καλησπερα σε όλη την κοινοτητα του ms-office
Εχω ενα παραδειγμα στο επισυναπτομενο αρχειο test1.xls ιδιο και στα δυο φυλλα του βιβλιου.
Στο φυλλο 1 μεσα στο textbox πλητρολογεις το φιλτρο για το κελι C7 (Δρομολογια)
Στο φυλλο 2 μπορεις να πληκτρολογήσεις στο C6, τι θες ως φιλτρο.
(Στο φυλλο 2 επίσης μπορεις σε ολη τη σειρα 6 να πληκτρολογεις φιλτρα για τα πεδια της σειρας 7. Δοκιμαστε στο Β6 να πληκτρολογησετε μ* )
Και τους δυο κωδικες VBA για φιλτρα χωρις dropdown menu, τους εχω βρει στο διαδίκτυο.
Η ερωτηση μου ειναι :
Εχω μια εφαρμογη σε ενα βιβλιο, με 4 φυλλα, με δεδομενα.
Και στα τεσσερα φυλλα, υπαρχει κοινο το πεδιο Δρομολογιο.
Θελω να φιλτράρω τις εγγραφες μου ως προς το Δρομολογιο (π.χ. 1) αλλα και στα τεσσερα φυλλα.
Μεχρι στιγμης το κανω με 4 textbox (1 σε καθε φυλλο) και πληκτρολογω το 1 σε καθε ένα (χρησιμοποιω δηλαδη το παραδειγμα Φυλλο 1 απο test1.xls)
Υπαρχει τροπος με VBA να διδω το δρομολογιο 1 σε καποιο φυλλο και να φλιτραρει 1 και στα 4 φυλλα ?

maxtor10 07-07-11 23:21

Σπαζοκεφαλιά : ενώ όλα είναι ίδια … Γιατί δεν κάνει αναζήτηση στα νούμερα;
 
1 Συνημμένο(α)
Εδώ σας επισυνάπτω ένα αρχείο που όπως λέει και ο τίτλος είναι σπαζοκεφαλιά ..
Στην ουσία … στο συγκεκριμένο αρχείο στο φύλλο “DATA” κάνω χρήση αυτού του φίλτρου για αναζήτηση διαφορών ονομάτων με απόλυτη επιτυχία , το πρόβλημα είναι όταν αντί για ονόματα έχω αριθμούς όπως την στήλη “Η” ΑΡ. ΤΙΜΟΛΟΓΙΟΥ ..Μπορεί να μου πει κάποιος γιατί γίνετε αυτό;

mak 08-07-11 00:08

1 Συνημμένο(α)
Καλησπερα σε όλους

Αν καταλαβα καλα αυτο που θες .....
ριξε μια ματια στο αρχειο που στελνω αν ειναι αυτο που θες

Xristos 08-07-11 13:04

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

mak 08-07-11 15:44

1 Συνημμένο(α)
Παράθεση:

Αρχική Δημοσίευση από maxtor10 (Μήνυμα 7202)
Εδώ σας επισυνάπτω ένα αρχείο που όπως λέει και ο τίτλος είναι σπαζοκεφαλιά ..
Στην ουσία … στο συγκεκριμένο αρχείο στο φύλλο “DATA” κάνω χρήση αυτού του φίλτρου για αναζήτηση διαφορών ονομάτων με απόλυτη επιτυχία , το πρόβλημα είναι όταν αντί για ονόματα έχω αριθμούς όπως την στήλη “Η” ΑΡ. ΤΙΜΟΛΟΓΙΟΥ ..Μπορεί να μου πει κάποιος γιατί γίνετε αυτό;

Ριξε μι ματια στο επυσυναπτομενο χρεωστικα πρακτοριων_2.1.3.xls
τωρα μπορει να βρει το αριθμο, αν τον πληκτρολογησεις όλον (π.χ. 351)
αλλα, το AVRA TOUR το βρισκει πληκτρολογοντας AV*
Ακριβως πως δουλευει δεν γνωριζω...
Οπως ειπα το βρήκα ετοιμο και απλα το χρησιμοποιησα !!

gr8styl 08-07-11 17:46

Καλησπέρα σας.
Θα ήθελα να σας πώ ότι στο Excel σε μια στήλη που περιέχει αριθμούς δεν μπορούμε να φιλτράρουμε με "Περιέχει ... ", διότι αυτό που υπάρχει στο κελί είναι αριθμός αποθηκευμένος σε δυαδική μορφή και όχι αριθμητικά ψηφία όπως εμφανίζεται και το βλέπουμε.
Το τέχνασμα λοιπόν είναι να μετατρέψουμε την στήλη των αριθμών σε αλφαριθμητικό σε μια βοηθητική στήλη και να φιλτράρουμε την βοηθητική στήλη.
Παράδειγμα:
Κώδικας:

ΣτήληΑ  ΣτήληΒ
Αριθμός aΑριθμός (ο τύπος είναι ="a"&a1)
 123,45 a123,45
  4.567 a4567
  12345 a12345
  1476 a1476
  1,70 a1,7

Αν θέλουμε να βρούμε τις γραμμές που περιέχουν τον αριθμό 7 θα πρέπει να φιλτράρουμε την στήλη Β και όχι την Α

Θανάσης

Tasos 08-07-11 18:25

1 Συνημμένο(α)
Καλησπέρα σε όλους!
Απευθύνομαι στο δημιουργό του θέματος τον Μανώλη.

Φίλε Μανώλη και εμείς είμαστε στο διαδίκτυο και νομίζω ότι τα καταφέρνουμε μια χαρά!:biggrin:

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

Βήμα 1:
Αφαιρείς το/τα TextΒox (προκαλούν αναταραχές στην οθόνη) και πληκτρολογείς το κριτήριο του αυτόματου φίλτρου στο κελί C6.
Αυτό ισχύει για όλα τα φύλλα που εμπλέκονται στην αναζήτηση και στο ταυτόχρονο φιλτράρισμα.

Βήμα 2:
Δημιουργείς ένα φύλλο (που αργότερα μπορείς να αποκρύψεις) με το κωδικό όνομα SheetList
που θα περιέχει το όνομα ArrSheets (Περιοχή A2:A10, μπορείς να το προσαρμόσεις στα μέτρα σου).
Στην περιοχή αυτή γράψε τα ονόματα των φύλλων που θα φιλτράρονται.

Βήμα 3:
Σε μια λειτουργική μονάδα πέρασε τον παρακάτω κώδικα:

Κώδικας:

Option Explicit
Public IsExecuting As Boolean
Dim c As Range, i As Integer

Sub ExecuteAllAutoFilters( _
    StartRange As String, _
    AutofilterField As Integer, _
    AutofilterCriteria As String, _
    ExcludedSheetName As String, _
    TargetAddress As String)

    For Each c In SheetList.Range("ArrSheets").SpecialCells(xlCellTypeConstants)
        With Parent.Worksheets(c.Text)
            If Not .Name = ExcludedSheetName Then
                If AutofilterCriteria = vbNullString Then
                    .AutoFilterMode = False
                Else
                    .Range(StartRange).AutoFilter Field:=AutofilterField, Criteria1:=AutofilterCriteria
                End If
                .Range(TargetAddress).Value = AutofilterCriteria
            End If
        End With
    Next
End Sub

Βήμα 4:

Στη λειτουργική μονάδα κλάσης του Βιβλίου (στο "ThisWorkBook", όχι των φύλλων) πέρασε τον παρακάτω κώδικα:
Κώδικας:

Option Explicit

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
If IsExecuting Then Exit Sub
    If Intersect(Target, Range("C6")) Is Nothing Then Exit Sub
    If SheetList.Range("ArrSheets").Find(Sh.Name) Is Nothing Then Exit Sub
    IsExecuting = True
    Range("A7:C7").AutoFilter Field:=3, Criteria1:=Target.Text
    ExecuteAllAutoFilters _
            StartRange:="A7:C7", _
            AutofilterField:=3, _
            AutofilterCriteria:=Target.Text, _
            ExcludedSheetName:=Sh.Name, _
            TargetAddress:=Target.Address
    If Trim(Target) = vbNullString Then Sh.AutoFilterMode = False
    IsExecuting = False
End Sub

Μπορείς να δεις την ακριβή λειτουργία των παραπάνω στο αρχείο που επισυνάπτω.

Καλή συνέχεια!

Φιλικά

Τάσος

mak 09-07-11 09:47

Καλημέρα σε όλους
 
Φιλε Τασο
κατ'αρχην να σε ευχαριστησω πολύ για το χρόνο σου...

Τωρα στο αρχειο που ανεβασες γινονται τα εξεις:
α. πληκτρολογεις στο 1ο φυλλο το κιτηριο π.χ. 1
β. ενεργοποιουνται τα βελακια του αυτοματου φιλτρου στις επικεφαλιδες (χωρις να φιλτραριστει τίποτα
γ. ξαναπληκτρολογεις στο c6 το κριτηριο και ok
δ. διαγραφεις το κριτηριο 1, απενεργοποιουνται τα βελακια
ε. πληκτρολογεις αλλο κριτηριο πχ 2 > ενεργοποιουνται τα βελακια (χωρις φιλτραρισμα)
στ.ξαναπληκτρολογεις στο c6 το κριτηριο και Βγαζει runtime error "H Μεθοδος AutoFilter της κλασης range απετυχε"

Και να ρωτησω και κατι "πως δημιουργεις φυλλο με κωδικο όνoμα Sheetlist" ?
Οπως καταλαβες ... εγω κόλλησα σε αυτό..!!!!
Φιλικα Μανώλης

Tasos 09-07-11 11:42

1 Συνημμένο(α)
Καλημέρα Μανώλη και ευχαριστώ για τις παρατηρήσεις!

Το πρόβλημα που περιγράφεις εμφανίζεται στην έκδοση Excel 2003.

Σε νεώτερες εκδόσεις λειτουργεί κανονικά.

Σήμερα που βρίσκομαι σε υπολογιστή με Office 2003 μπόρεσα να αναπαράγω το σφάλμα που περιγράφεις και προτείνω τα εξής:

Στο συμβάν Workbook_SheetChange

Άλλαξε το Range("A7:C7") με το Range("A7:C" & Rows.Count)

Επίσης άλλαξε το StartRange:="A7:C7" με το StartRange:="A7:C" & Rows.Count.

Όσο για την αλλαγή κωδικού ονόματος ενός φύλλου και γενικά ενός αντικειμένου στη VB
δες την εικόνα παρακάτω:
Συνημμένο Αρχείο 1777
Θα πρέπει να αποφεύγουμε να επικαλούμαστε ονόματα φύλλων στην Excel που ο κοινός χρήστης θα μπορούσε να μετονομάσει/μετακινήσει από την επιφάνεια εργασίας της εφαρμογής προκαλώντας σφάλματα στον κώδικα μας.

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

Καλή συνέχεια!

Φιλικά

Τάσος

mak 09-07-11 17:05

Καλησπερα σε όλη την κονοτητα
 
Φιλε Τασο,

Αυτο ήταν ....
Δουλεύει αψογα...
Σε ευχαριστω παρα πολύ για το χρονο σου

Φιλικα

Μανωλης


Η ώρα είναι 03:23.

Ms-Office.gr - ©2000 - 2026, Jelsoft Enterprises Ltd.


Search Engine Optimization by vBSEO 3.3.2