Forum

Forum (https://www.ms-office.gr/forum/)
-   Excel - Ερωτήσεις / Απαντήσεις (https://www.ms-office.gr/forum/excel-erotiseis-apantiseis/)
-   -   [Excel07] Διπλότυπα σε αναδυόμενη λίστα στο excel 2007 (https://www.ms-office.gr/forum/excel-erotiseis-apantiseis/3345-diplotypa-se-anadyomeni-lista-sto-excel-2007-a.html)

vasilis999 09-10-14 14:04

Διπλότυπα σε αναδυόμενη λίστα στο excel 2007
 
1 Συνημμένο(α)
Μερικές φορές η ανάγκη δημιουργεί εκπλήξεις ανακαλύπτοντας το πόσο σημαντικό είναι να υπάρχουν τόσα χέρια βοήθειας σε ένα τόσο όμορφο μέρος. Μπράβο σας :thumbup: συνεχίστε!
Στο θέμα μου τώρα:
Προσπαθώ εδώ και μέρες να φτιάξω μια φόρμα τιμολογίου στο excel
Και συναντώ την εξής δυσκολία: Σε μια αναδυόμενη λίστα που έχω δημιουργήσει σε περίπου 20 κελιά ενός φύλου, η οποία παίρνει δεδομένα από ένα άλλο φύλλο, δεν μπορώ να βρω λύση με τις διπλές εγγραφές! Ρωτώντας βρήκα κάποιες λύσεις, όπως την μορφοποίηση και το χρωματισμό των διπλών εγγραφών, αλλά δεν με ικανοποιεί, εάν όχι απόλυτα, βαριά κουβέντα, δεν ικανοποιεί το σχέδιο που έχω για τη φόρμα που θέλω να δημιουργήσω: Θέλω να πω θα μου ήταν πιο ευχάριστο να βγάζει ένα μήνυμα που να με προειδοποιεί για την διπλή εγγραφή! Το αν μπορώ να την περάσω (την εγγραφή) δεν με ενδιαφέρει και τόσο. Συγνώμη εάν κούρασα.
Επισυνάπτω πιο κάτω ένα πράδειγμα...

Spirosgr 09-10-14 17:04

Καλησπέρα
Βασίλη καλώς ήρθες στην παρέα μας.
Ο πιο κάτω κώδικας VBA θα πρέπει να επικολληθεί στο φύλλο (συμβάν Change)

Κώδικας:

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Column = 1 And Len(Target.Value) > 0 Then
        If Evaluate("Countif(A:A," & Target.Address & ")") > 1 Then
            MsgBox "Η Εγγραφή «" & Target.Value & "» υπάρχει ήδη και θα διαγραφεί.", _
            vbInformation, "Διαπιστώθηκε Διπλότυπο!"
            Range(Target.Address).ClearContents
        End If
    End If
End Sub

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

If Evaluate("Countif(D:D," & Target.Address & ")") > 1 Then

και στην γραμμή

If Target.Column = 4 And Len(Target.Value) > 0 Then

τα γράμματα και τον αριθμό με τον αντίστοιχο αρ. στήλης που θέλετε πχ για D στήλη = D:D & 4 κλπ.

vasilis999 09-10-14 22:11

Τι να πω τώρα! Κάθ' ένας τη δουλειά του Σπύρο....άμεσα και στοχευμένα...χίλια ευχαριστώ...
Ο κώδικας είναι διαμάντι και για μένα βέβαια κάτι σαν κινέζικα. Δεν είμαι εντελώς άσχετος αλλά από κώδικα:wall: Αυτό που θέλω να ρωτήσω κάνοντας κατάχρηση τον κόπο σας είναι ότι έχοντας συγχωνεύσει μερικά κελιά, η λίστα στέκετε σε 3-4 κελιά λόγω σχεδίασης, μου βγάζει το εξής μήνυμα και δεν λειτουργεί,ο κώδικας:

Run-time error '1004':
Δεν είναι δυνατή η αλλαγή τμήματος ενός συγχωνεμένου κελιού.

Κάνοντας αλλαγή τον κώδικά σου σε:
Παράθεση:

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 1 And Len(Target.Value) > 0 Then
If Evaluate("Countif(Α:Α," & Target.Address & ")") > 1 Then
MsgBox "Η Εγγραφή «" & Target.Value & "» Υπάρχει ήδη .", _
vbInformation, "Διαπιστώθηκε διπλότυπο!"

End If
End If
End Sub
...το πρόβλημα λύθηκε χωρίς βέβαια να σβήνει η διπλή εγγραφή. Απλά μου βγάζει ένα μήνυμα ότι η συγκεκριμένη εγγραφή υπάρχει ήδη και την αφήνει να συνυπάρχει. Αυτό σίγουρα συνέβει γιατί δεν έγινα πιο συγκεκριμένος! Αλλά είναι αυτό που ζητούσα από την αρχή! Μιλάμε τέλεια πράγματα! Σπύρο μου έφτιαξες τη μέρα..τη νύχτα θέλω να πω.
Αυτό που θέλω βέβαια να ρωτήσω όπως αναφέρω πιο πάνω είναι πως μπορεί ο κώδικας να χρησιμοποιηθεί σε συγχωνευμένα κελιά!
Ότι και να απαντήσετε δεκτό! Να είστε πάντα καλά.

Spirosgr 10-10-14 02:20

1 Συνημμένο(α)
Τα συγχωνευμένα κελιά, γενικά δημιουργούν πολλά προβλήματα.
Καλό είναι να μην τα χρησιμοποιούμε.
Εδώ που τα λέμε, είναι άχρηστη λειτουργία.
Υπάρχουν τρόποι και την μορφή ενός εγγράφου να έχουμε όπως κι αν την θέλουμε,
αλλά και από εδώ (βλέπε εικόνα) να έχουμε στοίχιση στο κέντρο, επιλεγμένων κελιών.

kostakis123 05-11-15 22:01

Διπλότυπα σε αναδυόμενη λίστα στο excel 2007 με 2 κριτήρια
 
1 Συνημμένο(α)
Καλησπέρα σας. θα ήθελα την βοήθεια σας σχετικά με την εύρεση διπλότυπων εγγραφών από ένα φύλλο excel. ο κώδικας που βρήκα με την βοήθεια του Spyrosgr που τον ευχαριστώ που τον είχε δημοσιεύσει για προηγούμενο θέμα είναι αυτός:

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 1 And Len(Target.Value) > 0 Then
If Evaluate("Countif(A:A," & Target.Address & ")") > 1 Then
MsgBox "Η Εγγραφή «" & Target.Value & "» υπάρχει ήδη και θα διαγραφεί.", _
vbInformation, "Διαπιστώθηκε Διπλότυπο!"
Range(Target.Address).ClearContents
End If
End If
End Sub

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

Ευχαριστώ εκ των προτέρων. Συνεχίστε την καλή δουλειά.

Επισυνάπτω ένα παράδειγμα αυτού που θέλω να κάνω. Οι στήλες που θέλω να ελέγχονται είναι οι C και D.

kapetang 06-11-15 09:45

1 Συνημμένο(α)
Καλημέρα

Κώστα, δες μια πρόταση στο συνημμένο

Φιλικά/Γιώργος

Spirosgr 06-11-15 10:08

Καλημέρα
Θεωρώ, ότι δεν υπάρχει ανάγκη, για καμία αλλαγή.
Ο αρχικός κώδικας, είναι αρκετός, διότι ελέγχει το παραστατικό,
που αυτό βασικά μας ενδιαφέρει, να μην είναι διπλότυπο.

Παράδειγμα επιτρεπτό
Κώδικας:

Πελάτης.......Παραστατικό...........Ποσό
Πελάτης1......100...................205
Πελάτης2......101...................205
Πελάτης1......102...................300

Παράδειγμα μη επιτρεπτό
Κώδικας:

Πελάτης.......Παραστατικό...........Ποσό
Πελάτης1......100...................205
Πελάτης2......101...................205
Πελάτης1......100...................300

Μπορεί να υπάρχουν, διπλότυπα σε πελάτη και ποσά.
Δεν μπορεί να υπάρχουν σε αρ. παραστατικού.


Η ώρα είναι 04:07.

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


Search Engine Optimization by vBSEO 3.3.2