Υπάρχουν δύο τύποι συμβάντων που μπορείτε να χρησιμοποιήσετε στον προγραμματισμό VBA για το Excel 2016 που δεν σχετίζονται με αντικείμενα: ώρα και πάτημα πλήκτρων. Επειδή ο χρόνος και τα πλήκτρα δεν σχετίζονται με ένα συγκεκριμένο αντικείμενο, όπως ένα βιβλίο εργασίας ή ένα φύλλο εργασίας, προγραμματίζετε αυτά τα συμβάντα σε μια κανονική λειτουργική μονάδα VBA.
Η εκδήλωση OnTime
Το συμβάν OnTime εμφανίζεται όταν εμφανίζεται μια συγκεκριμένη ώρα της ημέρας. Το ακόλουθο παράδειγμα δείχνει πώς να κάνετε το Excel να εκτελέσει μια διαδικασία όταν εμφανίζεται το συμβάν 3 μ.μ. Σε αυτήν την περίπτωση, μια φωνή ρομπότ σας λέει να ξυπνήσετε, συνοδευόμενη από ένα πλαίσιο μηνύματος:
Sub SetAlarm()
Application.OnTime 0.625, "DisplayAlarm"
End Sub
Sub DisplayAlarm()
Application.Speech.Speak ("Hey, wake up")
MsgBox "Ήρθε η ώρα για το απογευματινό σας διάλειμμα!"
End Sub
Σε αυτό το παράδειγμα, χρησιμοποιείται η μέθοδος OnTime του αντικειμένου Application. Αυτή η μέθοδος απαιτεί δύο ορίσματα: την ώρα (0,625 ή 3:00 μ.μ.) και το όνομα της διαδικασίας Sub που θα εκτελεστεί όταν συμβεί το συμβάν ώρας (DisplayAlarm).
Αυτή η διαδικασία είναι πολύ χρήσιμη αν τείνετε να τυλίγεστε τόσο πολύ στη δουλειά σας που ξεχνάτε τις συναντήσεις και τα ραντεβού. Απλώς ορίστε ένα συμβάν OnTime για να το υπενθυμίσετε στον εαυτό σας.
Οι περισσότεροι άνθρωποι δυσκολεύονται να σκεφτούν τον χρόνο από την άποψη του συστήματος αρίθμησης Excel. Επομένως, μπορεί να θέλετε να χρησιμοποιήσετε τη συνάρτηση VBA TimeValue για να αναπαραστήσετε την ώρα. Το TimeValue μετατρέπει μια συμβολοσειρά που μοιάζει με χρόνο σε μια τιμή που μπορεί να χειριστεί το Excel. Η ακόλουθη δήλωση δείχνει έναν ευκολότερο τρόπο προγραμματισμού μιας εκδήλωσης για τις 3 μ.μ.
Application.OnTime TimeValue ("3:00:00 pm"), "DisplayAlarm"
Εάν θέλετε να προγραμματίσετε μια εκδήλωση σε σχέση με την τρέχουσα ώρα (για παράδειγμα, σε 20 λεπτά από τώρα), μπορείτε να χρησιμοποιήσετε μια δήλωση όπως αυτή:
Application.OnTime Now + TimeValue ("00:20:00"), "DisplayAlarm"
Μπορείτε επίσης να χρησιμοποιήσετε τη μέθοδο OnTime για να εκτελέσετε μια διαδικασία VBA μια συγκεκριμένη ημέρα. Πρέπει να βεβαιωθείτε ότι ο υπολογιστής σας συνεχίζει να λειτουργεί και ότι το βιβλίο εργασίας με τη διαδικασία παραμένει ανοιχτό. Η ακόλουθη δήλωση εκτελεί τη διαδικασία DisplayAlarm στις 5 μ.μ. της 31ης Δεκεμβρίου 2016:
Application.OnTime DateValue ("12/31/2016 5:00 pm"), "DisplayAlarm"
Αυτή η συγκεκριμένη γραμμή κωδικών θα μπορούσε να σας φανεί χρήσιμη για να σας προειδοποιήσει ότι πρέπει να πάτε σπίτι και να προετοιμαστείτε για τις γιορτές της παραμονής της Πρωτοχρονιάς.
Ακολουθεί ένα άλλο παράδειγμα που χρησιμοποιεί το συμβάν OnTime. Η εκτέλεση των διαδικασιών UpdateClock γράφει την ώρα στο κελί A1 και επίσης προγραμματίζει ένα άλλο συμβάν πέντε δευτερόλεπτα αργότερα. Αυτό το συμβάν εκτελεί ξανά τη διαδικασία UpdateClock. Το καθαρό αποτέλεσμα είναι ότι το κελί A1 ενημερώνεται με την τρέχουσα ώρα κάθε πέντε δευτερόλεπτα. Για να σταματήσετε τα συμβάντα, εκτελέστε τη διαδικασία StopClock (η οποία ακυρώνει το συμβάν). Σημειώστε ότι το NextTick είναι μια μεταβλητή σε επίπεδο ενότητας που αποθηκεύει την ώρα για το επόμενο συμβάν.
Dim NextTick As Date
Sub UpdateClock()
' Ενημερώνει το κελί A1 με την τρέχουσα ώρα
ThisWorkbook.Sheets(1).Range(“A1”) = Time
Ρυθμίστε το επόμενο συμβάν σε πέντε δευτερόλεπτα από τώρα
NextTick = Now + TimeValue ("00:00:05")
Application.OnTime NextTick, "UpdateClock"
End Sub
Sub StopClock()
' Ακυρώνει το συμβάν OnTime (σταματά το ρολόι)
Σφάλμα Συνέχιση Επόμενο
Application.OnTime NextTick, “UpdateClock”, , False
End Sub
Το συμβάν OnTime παραμένει ακόμα και μετά το κλείσιμο του βιβλίου εργασίας. Με άλλα λόγια, εάν κλείσετε το βιβλίο εργασίας χωρίς να εκτελέσετε τη διαδικασία StopClock, το βιβλίο εργασίας θα ανοίξει ξανά σε πέντε δευτερόλεπτα (υποθέτοντας ότι το Excel εξακολουθεί να εκτελείται). Για να αποτρέψετε αυτό, χρησιμοποιήστε μια διαδικασία συμβάντος Workbook_BeforeClose που περιέχει την ακόλουθη δήλωση:
Καλέστε το StopClock
Η μέθοδος OnTime έχει δύο επιπλέον ορίσματα. Εάν σκοπεύετε να χρησιμοποιήσετε αυτήν τη μέθοδο, θα πρέπει να ανατρέξετε στο σύστημα Βοήθειας για πλήρεις λεπτομέρειες.
Εάν θέλετε να δείτε μια αρκετά περίπλοκη εφαρμογή, ρίξτε μια ματιά σε αυτήν την εφαρμογή αναλογικού ρολογιού. Η πρόσοψη του ρολογιού είναι στην πραγματικότητα ένα γράφημα και το γράφημα ενημερώνεται κάθε δευτερόλεπτο για να εμφανίζει την ώρα της ημέρας. Άχρηστο, αλλά διασκεδαστικό.
Μια εφαρμογή αναλογικού ρολογιού.
Συμβάντα πατήματος πλήκτρων
Ενώ εργάζεστε, το Excel παρακολουθεί συνεχώς αυτό που πληκτρολογείτε. Εξαιτίας αυτού, μπορείτε να ρυθμίσετε τα πράγματα έτσι ώστε ένα πάτημα πλήκτρων ή ένας συνδυασμός πλήκτρων να εκτελεί μια διαδικασία.
Ακολουθεί ένα παράδειγμα που εκχωρεί εκ νέου τα κλειδιά PgDn και PgUp:
Sub Setup_OnKey()
Application.OnKey "{PgDn}", "PgDn_Sub"
Application.OnKey "{PgUp}", "PgUp_Sub"
End Sub
Sub PgDn_Sub()
Σφάλμα Συνέχιση Επόμενο
ActiveCell.Offset(1, 0).Ενεργοποίηση
End Sub
Sub PgUp_Sub()
Σφάλμα Συνέχιση Επόμενο
ActiveCell.Offset(-1, 0).Ενεργοποίηση
End Sub
Αφού ρυθμίσετε τα συμβάντα OnKey εκτελώντας τη διαδικασία Setup_OnKey, πατώντας το PgDn μετακινηθείτε προς τα κάτω κατά μία σειρά. Πατώντας το PgUp μετακινηθείτε μία σειρά προς τα πάνω.
Παρατηρήστε ότι οι κωδικοί των κλειδιών περικλείονται σε αγκύλες και όχι σε παρενθέσεις. Για μια πλήρη λίστα κωδικών πληκτρολογίου, συμβουλευτείτε το σύστημα Βοήθειας. Αναζήτηση για OnKey.
Σε αυτό το παράδειγμα, το On Error Resume Next χρησιμοποιείται για να αγνοήσει τυχόν σφάλματα που δημιουργούνται. Για παράδειγμα, εάν το ενεργό κελί βρίσκεται στην πρώτη σειρά, η προσπάθεια μετακίνησης προς τα επάνω κατά μία σειρά προκαλεί ένα σφάλμα που μπορεί να αγνοηθεί με ασφάλεια. Και αν ένα φύλλο γραφήματος είναι ενεργό, δεν υπάρχει ενεργό κελί.
Εκτελώντας την ακόλουθη ρουτίνα, ακυρώνετε τα συμβάντα OnKey:
Sub Cancel_OnKey()
Application.OnKey "{PgDn}"
Application.OnKey "{PgUp}"
End Sub
Η χρήση κενού συμβολοσειράς ως δεύτερου ορίσματος για τη μέθοδο OnKey δεν ακυρώνει το συμβάν OnKey. Αντίθετα, αναγκάζει το Excel να αγνοήσει απλώς το πάτημα πλήκτρων. Για παράδειγμα, η ακόλουθη δήλωση λέει στο Excel να αγνοήσει το Alt+F4. Το σύμβολο ποσοστού αντιπροσωπεύει το κλειδί Alt:
Application.OnKey "%{F4}", ""
Αν και μπορείτε να χρησιμοποιήσετε τη μέθοδο OnKey για να εκχωρήσετε ένα κλειδί συντόμευσης για την εκτέλεση μιας μακροεντολής, θα πρέπει να χρησιμοποιήσετε το πλαίσιο διαλόγου Επιλογές μακροεντολής για αυτήν την εργασία.
Εάν κλείσετε το βιβλίο εργασίας που περιέχει τον κώδικα και αφήσετε το Excel ανοιχτό, η μέθοδος OnKey δεν θα επαναφερθεί. Κατά συνέπεια, πατώντας το πλήκτρο συντόμευσης, το Excel θα ανοίξει αυτόματα το αρχείο με τη μακροεντολή. Για να μην συμβεί αυτό, θα πρέπει να συμπεριλάβετε κώδικα στον κώδικα συμβάντος Workbook_BeforeClose για να επαναφέρετε το συμβάν OnKey.