Βίντεο: Κατανόηση των Μυστηρίων του Θεού (24 Μαι 1998) 2025
Η λειτουργία IsDate της VBA υποτίθεται ότι σας λέει αν μια συμβολοσειρά κειμένου μπορεί να ερμηνευτεί ως ημερομηνία. Για παράδειγμα, όλες οι ακόλουθες εκφράσεις αξιολογούνται ως True:
IsDate ("5/25/2015") IsDate ("16 Ιανουαρίου") IsDate ("12-1" IsDate ("2/30") IsDate ("30/2")
Στα δύο τελευταία παραδείγματα, παρατηρήστε ότι το IsDate δεν είναι επιλεκτικό για τη σειρά της ημέρας και του μήνα. Και οι δύο αυτές συμβολοσειρές θα μπορούσαν να ερμηνευτούν ως ημερομηνία, έτσι IsDate επιστρέφει True (ανεξάρτητα από τις ρυθμίσεις μορφής ημερομηνίας συστήματος).
Ακολουθούν ορισμένες πληροφορίες από ένα άρθρο υποστήριξης της Microsoft:
Η ημερομηνία VBA λειτουργεί με IsDate, Format, CDate και CVDate χρησιμοποιώντας μια λειτουργία που βρίσκεται στο OLE Automation (OleAut32.dll). Αυτή η λειτουργία αναζητά όλες τις πιθανές μορφές ημερομηνίας, ξεχωρίζοντας κάθε μία από τις διαχωρισμένες τιμές στη συμβολοσειρά που αντιπροσωπεύει την ημερομηνία και επιστρέφει μια τιμή Boolean που δηλώνει εάν η είσοδος μπορεί να αναπαρασταθεί ως ημερομηνία.
Αυτό είναι σημαντικό να θυμάστε όταν χρησιμοποιείτε τη λειτουργία για να ερμηνεύσετε μια ημερομηνία που περιέχει ένα διψήφιο έτος. Οι διαφορετικοί τόποι χρησιμοποιούν διαφορετικές μορφές ημερομηνίας (δηλαδή, mm / dd / yy, yy / mm / dd, " DD MMM YY " , " YY MMM DD " και ούτω καθεξής) και ως εκ τούτου η λειτουργία προσπαθεί τα ψηφία σε όλες τις θέσεις έως ότου η λειτουργία βρει μια έγκυρη ημερομηνία ή εξαντλήσει όλες τις δυνατότητες.
Μόνο επειδή η IsDate αναγνωρίζει μια συμβολοσειρά ως ημερομηνία, δεν σημαίνει ότι η συμβολοσειρά μπορεί να μετατραπεί αξιόπιστα σε μια ημερομηνία. Σε ορισμένες περιπτώσεις, το αποτέλεσμα είναι διφορούμενο. Για παράδειγμα, τι γίνεται με αυτή την έκφραση;
IsDate ("29-Φεβ-01")
29 Φεβρουαρίου 2001 δεν είναι έγκυρη ημερομηνία. Ωστόσο, αυτή η έκφραση επιστρέφει True επειδή η 1η Φεβρουαρίου 1929 (και 2 Ιανουαρίου 1929) είναι έγκυρες ημερομηνίες. Και έτσι είναι οι ίδιες ημερομηνίες το 2029.
Μια αναζήτηση για την τεκμηρίωση του IsDate ήρθε κενή. Με βάση τις δοκιμές, το IsDate δέχεται οποιοδήποτε από τα παρακάτω ως χαρακτήρες διαχωρισμού: μια κάθετο (/), ένα παύλα (-), ένα κόμμα (,), μια τελεία (.) Και ένα κενό.
Επομένως, όλες οι ακόλουθες εκφράσεις επιστρέφουν αληθινά:
IsDate ("5. 1") IsDate ("30 6") IsDate (" τότε υπάρχει αυτή η ανωμαλία: Οι ακόλουθες εκφράσεις επιστρέφουν True:
IsDate ("5. 1. 5") IsDate ("5. 1. 05")
Ωστόσο, ανεξήγητα, αυτή η έκφραση επιστρέφει False:
IsDate ("5. 1. 2005")
Υποθέστε ότι έχετε δημιουργήσει ένα UserForm με InputBox όπου ο χρήστης εισάγει μια ημερομηνία. Θα πρέπει να είναι σαφές ότι η χρήση του IsDate για την επικύρωση της καταχώρισης δεν είναι πολύ αξιόπιστη.
Τα πράγματα γίνονται ακόμα πιο συγκεχυμένα όταν συνειδητοποιείτε ότι το IsDate καλύπτει επίσης τις τιμές του χρόνου. (Δεν υπάρχει καμία αντίστοιχη λειτουργία IsTime.) Έτσι, όλες οι ακόλουθες εκφράσεις επιστρέφουν True:
IsDate ("4: 45") IsDate ("4 45") IsDate "IsDate (" 23: 59 ")
Αυτές οι εκφράσεις επιστρέφουν λανθασμένες:
IsDate (" 4: 60 ") IsDate (" παρουσιάζουν όλες αυτές τις ιδιορρυθμίες όταν περάσετε ένα όριο εύρους. Για παράδειγμα:
IsDate (Range ("A1"))
Φαίνεται ότι το IsDate είναι απόλυτα αξιόπιστο για τον προσδιορισμό κελιών που περιέχουν ημερομηνία ή χρόνο. Δεν προσδιορίζει, για παράδειγμα, ένα κελί που περιέχει 5. 1 ως ημερομηνία. Εάν ο κώδικάς σας χρειάζεται να καθορίσει αν μια συμβολοσειρά μπορεί να ερμηνευτεί ως ημερομηνία, η καλύτερη λύση είναι να τοποθετήσετε αυτήν τη συμβολοσειρά σε ένα κελί και στη συνέχεια να γράψετε κώδικα για να ελέγξετε τα περιεχόμενα των κυττάρων.