Σφάλμα κατά την επικύρωση επικύρωσης στο VBA - Συμβουλές για το Excel

Πίνακας περιεχομένων

Εάν έχετε διαβάσει τα πρώτα κεφάλαια του VBA & Macros για το Microsoft Excel, γνωρίζετε ότι παραπονιέμαι ότι η συσκευή εγγραφής μακροεντολών του Excel δεν κάνει τη μεγαλύτερη δουλειά για την καταγραφή χρησιμοποιήσιμου κώδικα. Συνήθως, ο κώδικας λειτουργεί καλά, αλλά καταγράφεται με τέτοιο τρόπο ώστε να μην είναι τόσο χρήσιμος για σύνολα δεδομένων διαφορετικού μεγέθους. Ο κωδικός μπορεί να λειτουργεί καλά σήμερα, αλλά όχι αύριο.

Αντιμετώπισα ένα πολύ περίεργο πρόβλημα, όπου η συσκευή εγγραφής μακροεντολής κατέγραψε κώδικα που δεν λειτούργησε. Έγραψα μια μακροεντολή που προσπάθησε να αντιγράψει την επικύρωση από ένα κελί σε μια σειρά κελιών. Στο Excel 2002, αυτός ο κωδικός είχε ως εξής:

Range(“E5”).Copy Range(“E6:E12”).PasteSpecial Paste:=xlPasteValidation

Αυτός ο κώδικας λειτούργησε καλά στο Excel 2002, αλλά απέτυχε στο μηχάνημα ενός πελάτη με το Excel 2000. Ένας από τους παλιούς υπολογιστές στο γραφείο εξακολουθεί να έχει το Excel 2000, οπότε δοκίμασα τον κωδικό εκεί. Το πρόβλημα ήταν με το xlPasteValidation. Κάθε φορά που αντιμετωπίζω κάτι ασυνήθιστο, ξεκινώ τη μακροεντολή εγγραφής για να δω πώς θα καταγράφει τον κώδικα η μακροεντολή. Ρύθμισα την επικύρωση στο E5, ενεργοποίησα τη συσκευή εγγραφής μακροεντολών, αντιγράψαμε το E5 και χρησιμοποίησα την Ειδική επικόλληση - Επικύρωση. Μετά τη διακοπή της εγγραφής μακροεντολών, σημείωσα ότι το Excel 2000 κατέγραψε τη σταθερά ως:

Range(“E6:E12”).PasteSpecial Paste:=xlDataValidation

Έτσι, πήγα στην εφαρμογή πελάτη, άλλαξα τον κωδικό σε xlDataValidation και τον έτρεξα ξανά. Περιέργως, παρήγαγε το ίδιο σφάλμα!

Αποδεικνύεται ότι η εγγραφή μακροεντολών του Excel 2000 έχει στην πραγματικότητα ένα σφάλμα. Θα καταγράψει τη σταθερά xlDataValidation, αλλά ο διερμηνέας μακροεντολών δεν θα αναγνωρίσει ούτε xlDataValidation ούτε xlPasteValidation. Η Βοήθεια του Excel VBA στο Excel 2000 προσποιείται ότι δεν υπάρχει τρόπος επικόλλησης μόνο επικυρώσεων.

Για να γίνει αυτό, πρέπει να ανακαλύψετε την υποκείμενη τιμή του xlPasteValidation. Στο μηχάνημά μου XL2002, πήγα στον επεξεργαστή VBA. Πληκτρολογήστε Ctrl + G για να ανοίξετε το άμεσο παράθυρο και πληκτρολογήστε το στο άμεσο παράθυρο:

Print xlPasteValidation

Πατήστε Enter και το Excel 2002 θα σας πει ότι το xlPasteValidation είναι ένας φιλικός τρόπος να πείτε "6". Πίσω στο μηχάνημα του Excel 2000, δοκίμασα αυτόν τον κωδικό:

Range(“E6:E12”).PasteSpecial Paste:=6

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

‘Bug in XL2000; need to use “6” instead of the constant Range(“E6:E12”).PasteSpecial Paste:=6

Έτσι - το μικρό μάθημα σήμερα είναι το πολύ συγκεκριμένο πρόβλημα του πώς να επικολλήσετε την ειδική επικύρωση στο Excel 2000, αλλά το μεγαλύτερο μάθημα είναι η εργασία ντετέκτιβ που απαιτείται για να καταλάβετε τι συμβαίνει όταν συμβαίνει κάτι περίεργο στο Excel VBA.

ενδιαφέροντα άρθρα...