Συμβάντα συμβαίνουν συνεχώς όταν ένας χρήστης ανοίγει ένα βιβλίο εργασίας του Excel και αρχίζει να κάνει διάφορες ενέργειες, όπως εισαγωγή δεδομένων σε κελιά ή μετακίνηση μεταξύ φύλλων
Μέσα στο Visual Basic Editor (ALT+F11), έχουν ήδη ρυθμιστεί δευτερεύουσες ρουτίνες που μπορούν να απογειωθούν όταν ο χρήστης κάνει κάτι π.χ. εισαγωγή δεδομένων σε ένα κελί. Η δευτερεύουσα ρουτίνα δεν παρέχει κανένα κωδικό ενέργειας, απλώς μια δήλωση «Sub» και μια δήλωση «End Sub» χωρίς κωδικό μεταξύ τους. Είναι πραγματικά αδρανείς, οπότε δεν συμβαίνει τίποτα μέχρι να εισαγάγετε κάποιο κωδικό.
Ακολουθεί ένα παράδειγμα που βασίζεται στο συμβάν «Αλλαγή» σε ένα φύλλο εργασίας:
Ως προγραμματιστής VBA, μπορείτε να προσθέσετε κώδικα για να συμβούν ορισμένα πράγματα όταν ο χρήστης πραγματοποιήσει μια συγκεκριμένη ενέργεια. Αυτό σας δίνει την ευκαιρία να ελέγξετε τον χρήστη και να τον αποτρέψετε από ενέργειες που δεν θέλετε να κάνουν και οι οποίες ενδέχεται να βλάψουν το βιβλίο εργασίας σας. Για παράδειγμα, μπορεί να θέλετε να αποθηκεύσουν το δικό τους μεμονωμένο αντίγραφο του βιβλίου εργασίας με άλλο όνομα, έτσι ώστε να μην επηρεάζουν το πρωτότυπο, το οποίο μπορεί να χρησιμοποιείται από πολλούς χρήστες.
Εάν κλείσουν το βιβλίο εργασίας, τότε θα τους ζητηθεί αυτόματα να αποθηκεύσουν τις αλλαγές τους. Ωστόσο, το βιβλίο εργασίας έχει ένα συμβάν "BeforeClose" και μπορείτε να εισαγάγετε κώδικα για να αποφύγετε το κλείσιμο του βιβλίου εργασίας και την εκκίνηση ενός συμβάντος "Αποθήκευση". Στη συνέχεια, μπορείτε να προσθέσετε ένα κουμπί στο ίδιο το φύλλο εργασίας και να βάλετε τη δική σας ρουτίνα "Αποθήκευση" σε αυτό. Μπορείτε επίσης να απενεργοποιήσετε τη ρουτίνα "Αποθήκευση" χρησιμοποιώντας το συμβάν "BeforeSave"
Η κατανόηση του τρόπου λειτουργίας των γεγονότων είναι απολύτως απαραίτητη για έναν προγραμματιστή VBA.
Τύποι εκδηλώσεων
ΤΕΤΡΑΔΙΟ ΕΡΓΑΣΙΩΝ Εκδηλώσεις - αυτά τα συμβάντα απενεργοποιούνται με βάση το τι κάνει ο χρήστης με το ίδιο το βιβλίο εργασίας. Περιλαμβάνουν ενέργειες χρηστών όπως άνοιγμα του βιβλίου εργασίας, κλείσιμο του βιβλίου εργασίας, αποθήκευση του βιβλίου εργασίας, προσθήκη ή διαγραφή φύλλου
Εκδηλώσεις φύλλου εργασίας - αυτά τα συμβάντα απενεργοποιούνται από έναν χρήστη που πραγματοποιεί ενέργειες σε ένα συγκεκριμένο φύλλο εργασίας. Κάθε φύλλο εργασίας μέσα στο βιβλίο εργασίας έχει μια μεμονωμένη ενότητα κώδικα, η οποία περιέχει διάφορα συμβάντα ειδικά για αυτό το φύλλο εργασίας (όχι για όλα τα φύλλα εργασίας). Αυτές περιλαμβάνουν ενέργειες χρήστη, όπως αλλαγή του περιεχομένου ενός κελιού, διπλό κλικ σε ένα κελί ή δεξί κλικ σε ένα κελί.
Active X Συμβάντα ελέγχου - Τα στοιχεία ελέγχου Active X μπορούν να προστεθούν σε ένα φύλλο εργασίας χρησιμοποιώντας το εικονίδιο "Εισαγωγή" στην καρτέλα "Προγραμματιστής" στην κορδέλα του Excel. Αυτά είναι συχνά χειριστήρια κουμπιών που επιτρέπουν στον χρήστη να πραγματοποιεί διάφορες ενέργειες υπό τον έλεγχο του κώδικα σας, αλλά μπορεί επίσης να είναι αντικείμενα όπως αναπτυσσόμενα. Η χρήση στοιχείων ελέγχου Active X σε αντίθεση με τα στοιχεία ελέγχου φόρμας στο φύλλο εργασίας δίνει ένα ολόκληρο πεδίο προγραμματισμού. Τα στοιχεία ελέγχου Active X σας παρέχουν πολύ μεγαλύτερη ευελιξία από άποψη προγραμματισμού σε σχέση με τη χρήση στοιχείων ελέγχου φόρμας σε ένα φύλλο εργασίας.
Για παράδειγμα, θα μπορούσατε να έχετε δύο αναπτυσσόμενα στοιχεία ελέγχου στο φύλλο εργασίας σας. Θέλετε η διαθέσιμη λίστα στο δεύτερο αναπτυσσόμενο μενού να βασίζεται σε αυτό που επέλεξε ο χρήστης στο πρώτο αναπτυσσόμενο μενού. Χρησιμοποιώντας το συμβάν «Αλλαγή» στο πρώτο αναπτυσσόμενο μενού, μπορείτε να δημιουργήσετε κώδικα για να διαβάσετε τι έχει επιλέξει ο χρήστης και, στη συνέχεια, να ενημερώσετε το δεύτερο αναπτυσσόμενο μενού. Μπορείτε επίσης να απενεργοποιήσετε το δεύτερο αναπτυσσόμενο μενού έως ότου ο χρήστης κάνει μια επιλογή στο πρώτο αναπτυσσόμενο μενού
Εκδηλώσεις UserForm - Μπορείτε να εισαγάγετε και να σχεδιάσετε μια επαγγελματική φόρμα για χρήση ως αναδυόμενο παράθυρο. Όλα τα στοιχεία ελέγχου που τοποθετείτε στη φόρμα σας είναι στοιχεία ελέγχου Active X και έχουν τα ίδια συμβάντα με τα στοιχεία ελέγχου Active X που μπορείτε να τοποθετήσετε σε ένα φύλλο εργασίας
Διάγραμμα γεγονότων - Αυτά τα γεγονότα σχετίζονται μόνο με ένα φύλλο γραφήματος και όχι με ένα γράφημα που εμφανίζεται ως μέρος ενός φύλλου εργασίας. Αυτά τα συμβάντα περιλαμβάνουν αλλαγή μεγέθους του γραφήματος ή επιλογή του γραφήματος.
Εκδηλώσεις εφαρμογής - Αυτά χρησιμοποιούν το αντικείμενο εφαρμογής στο VBA. Παραδείγματα θα επιτρέψουν την απενεργοποίηση του κώδικα όταν πατηθεί ένα συγκεκριμένο πλήκτρο ή όταν επιτευχθεί συγκεκριμένος χρόνος. Θα μπορούσατε να προγραμματίσετε μια κατάσταση όπου το βιβλίο εργασίας παραμένει ανοιχτό 24/7 και εισάγει δεδομένα από εξωτερική πηγή όλη τη νύχτα σε προκαθορισμένη ώρα.
Κίνδυνοι από τη χρήση κώδικα σε εκδηλώσεις
Όταν γράφετε κώδικα για να κάνετε κάτι όταν ο χρήστης κάνει μια συγκεκριμένη ενέργεια, πρέπει να έχετε κατά νου ότι ο κώδικάς σας θα μπορούσε να ενεργοποιήσει άλλα συμβάντα, τα οποία θα μπορούσαν να θέσουν τον κώδικά σας σε έναν συνεχή βρόχο.
Για παράδειγμα, ας υποθέσουμε ότι χρησιμοποιείτε το συμβάν «Αλλαγή» σε ένα φύλλο εργασίας, έτσι ώστε όταν ο χρήστης βάζει μια τιμή σε ένα κελί, ένας υπολογισμός που βασίζεται σε αυτό το κελί τοποθετείται στο κελί αμέσως στα δεξιά του.
Το πρόβλημα εδώ είναι ότι η τοποθέτηση της υπολογιζόμενης τιμής στο κελί ενεργοποιεί ένα άλλο συμβάν "Αλλαγή", το οποίο στη συνέχεια ενεργοποιεί ένα άλλο συμβάν "Αλλαγή" και ούτω καθεξής έως ότου εξαντληθούν οι στήλες του κώδικα για χρήση και αναρτηθεί ένα μήνυμα σφάλματος.
Πρέπει να σκεφτείτε προσεκτικά όταν γράφετε τον κώδικα για το συμβάν για να διασφαλίσετε ότι άλλα συμβάντα δεν θα ενεργοποιηθούν ακούσια
Απενεργοποίηση συμβάντων
Μπορείτε να χρησιμοποιήσετε κώδικα για να απενεργοποιήσετε συμβάντα για να αντιμετωπίσετε αυτό το πρόβλημα. Αυτό που θα χρειαστεί να κάνετε είναι να ενσωματώσετε κώδικα για να απενεργοποιήσετε συμβάντα ενώ εκτελείται ο κωδικός συμβάντος και, στη συνέχεια, να ενεργοποιήσετε ξανά τα συμβάντα στο τέλος του κώδικα. Εδώ είναι ένα παράδειγμα για το πώς να το κάνετε:
1234 | Sub DisableEvents ()Application.EnableEvents = ΛάθοςApplication.EnableEvents = TrueΤέλος υπο |
Λάβετε υπόψη ότι αυτό απενεργοποιεί όλα τα συμβάντα ακριβώς στην εφαρμογή Excel, επομένως αυτό θα επηρεάσει επίσης άλλες λειτουργίες εντός του Excel. Εάν το χρησιμοποιείτε για οποιονδήποτε λόγο, βεβαιωθείτε ότι τα συμβάντα ενεργοποιούνται ξανά στη συνέχεια.
Η σημασία των παραμέτρων στα γεγονότα
Τα συμβάντα έχουν συνήθως παραμέτρους τις οποίες μπορείτε να χρησιμοποιήσετε για να μάθετε περισσότερα σχετικά με το τι κάνει ο χρήστης και τη θέση κελιού στην οποία βρίσκονται.
Για παράδειγμα, το συμβάν "Αλλαγή φύλλου εργασίας" μοιάζει με αυτό:
1 | Private Sub Worksheet_Change (ByVal Target As Range) |
Χρησιμοποιώντας το αντικείμενο εύρους, μπορείτε να μάθετε τις συντεταγμένες της σειράς/στήλης κελιού στις οποίες βρίσκεται ο χρήστης.
1234 | Private Sub Worksheet_Change (ByVal Target As Range)MsgBox Target.ColumnMsgBox Target.RowΤέλος υπο |
Εάν θέλετε ο κωδικός σας να λειτουργεί μόνο σε μια συγκεκριμένη στήλη ή αριθμό γραμμής, τότε προσθέτετε μια συνθήκη που εξέρχεται από την υπορουτίνα εάν η στήλη δεν είναι η απαιτούμενη.
123 | Private Sub Worksheet_Change (ByVal Target As Range)Αν Στόχος.Στήλη 2 Στη συνέχεια Έξοδος από ΥποΤέλος υπο |
Αυτό αντιμετωπίζει το πρόβλημα του κώδικα που ενεργοποιεί πολλά συμβάντα, καθώς θα λειτουργήσει μόνο εάν ο χρήστης έχει αλλάξει ένα κελί στη στήλη 2 (στήλη Β)
Παραδείγματα εκδηλώσεων βιβλίου εργασίας (όχι εξαντλητικά)
Τα συμβάντα του βιβλίου εργασίας βρίσκονται κάτω από το αντικείμενο "ThisWorkbook" στο VBE Project Explorer. Θα χρειαστεί να επιλέξετε «Βιβλίο εργασίας» στο πρώτο αναπτυσσόμενο μενού στο παράθυρο κωδικών και στη συνέχεια το δεύτερο αναπτυσσόμενο μενού θα σας δείξει όλα τα διαθέσιμα συμβάντα
Βιβλίο εργασίας ανοιχτή εκδήλωση
Αυτό το συμβάν απενεργοποιείται κάθε φορά που ανοίγει το βιβλίο εργασίας από έναν χρήστη. Μπορείτε να το χρησιμοποιήσετε για να στείλετε ένα μήνυμα καλωσορίσματος σε έναν χρήστη καταγράφοντας το όνομα χρήστη του
123 | Private Sub Workbook_Open ()MsgBox "Welcome" & Application.UserNameΤέλος υπο |
Θα μπορούσατε επίσης να ελέγξετε το όνομα χρήστη τους έναντι μιας λίστας που διατηρείται σε ένα κρυφό φύλλο για να δείτε αν έχουν εξουσιοδότηση πρόσβασης στο βιβλίο εργασίας. Εάν δεν είναι εξουσιοδοτημένος χρήστης, τότε μπορείτε να εμφανίσετε ένα μήνυμα και να κλείσετε το βιβλίο εργασίας, ώστε να μην μπορούν να το χρησιμοποιήσουν.
Τετράδιο εργασίας Εκδήλωση νέου φύλλου
Αυτό το συμβάν ενεργοποιείται όταν ένας χρήστης προσθέσει ένα νέο φύλλο στο βιβλίο εργασίας
Θα μπορούσατε να χρησιμοποιήσετε αυτόν τον κώδικα μόνο για να επιτρέψετε στον εαυτό σας να προσθέσει ένα νέο φύλλο, αντί να έχει διαφορετικούς χρήστες να προσθέτουν φύλλα και να κάνουν ένα χάος στο βιβλίο εργασίας
1234567 | Private Sub Workbook_NewSheet (ByVal Sh As Object)Application.DisplayAlerts = ΛάθοςΕάν Application.UserName "Richard" ΤότεSh.DeleteΤέλος εανApplication.DisplayAlerts = TrueΤέλος υπο |
Λάβετε υπόψη ότι πρέπει να απενεργοποιήσετε τις ειδοποιήσεις καθώς μια προειδοποίηση χρήστη θα εμφανιστεί όταν διαγραφεί το φύλλο, το οποίο επιτρέπει στον χρήστη να παρακάμψει τον κωδικό σας. Βεβαιωθείτε ότι έχετε ενεργοποιήσει ξανά τις ειδοποιήσεις μετά!
Κουραστήκατε να ψάχνετε για παραδείγματα κώδικα VBA; Δοκιμάστε το AutoMacro!
Τετράδιο εργασίας πριν την αποθήκευση συμβάντος
Αυτό το συμβάν ενεργοποιείται όταν ο χρήστης κάνει κλικ στο εικονίδιο "Αποθήκευση", αλλά πριν πραγματοποιηθεί το "Αποθήκευση"
Όπως περιγράφηκε νωρίτερα, μπορεί να θέλετε να αποτρέψετε τους χρήστες να αποθηκεύσουν τις αλλαγές τους στο αρχικό βιβλίο εργασίας και να τους αναγκάσετε να δημιουργήσουν μια νέα έκδοση χρησιμοποιώντας ένα κουμπί στο φύλλο εργασίας. Το μόνο που χρειάζεται να κάνετε είναι να αλλάξετε την παράμετρο «Ακύρωση» σε True και το βιβλίο εργασίας δεν μπορεί ποτέ να αποθηκευτεί με τη συμβατική μέθοδο.
123 | Private Sub Workbook_BeforeSave (ByVal SaveAsUI As Boolean, Cancel As Boolean)Ακύρωση = ΑλήθειαΤέλος υπο |
Τετράδιο εργασίας πριν από το κλείσιμο του συμβάντος
Μπορείτε να χρησιμοποιήσετε αυτό το συμβάν για να αποτρέψετε τους χρήστες να κλείσουν το βιβλίο εργασίας και να τους αναγκάσετε ξανά να εξέλθουν μέσω ενός κουμπιού φύλλου εργασίας. Και πάλι, ορίσατε την παράμετρο «Ακύρωση» σε «Αληθινή». Το κόκκινο Χ στην επάνω δεξιά γωνία του παραθύρου του Excel δεν λειτουργεί πλέον.
123 | Private Sub Workbook_BeforeClose (Cancel As Boolean)Ακύρωση = ΑλήθειαΤέλος υπο |
Παραδείγματα συμβάντων φύλλου εργασίας (όχι εξαντλητικά)
Τα συμβάντα του φύλλου εργασίας βρίσκονται κάτω από το συγκεκριμένο αντικείμενο ονόματος φύλλου στο VBE Project Explorer. Θα χρειαστεί να επιλέξετε «Φύλλο εργασίας» στο πρώτο αναπτυσσόμενο μενού στο παράθυρο κώδικα και στη συνέχεια το δεύτερο αναπτυσσόμενο μενού θα σας δείξει όλα τα διαθέσιμα συμβάντα
Συμβάν αλλαγής φύλλου εργασίας
Αυτό το συμβάν ενεργοποιείται όταν ένας χρήστης κάνει μια αλλαγή σε ένα φύλλο εργασίας, όπως η εισαγωγή μιας νέας τιμής σε ένα κελί
Μπορείτε να χρησιμοποιήσετε αυτό το συμβάν για να προσθέσετε μια πρόσθετη τιμή ή ένα σχόλιο δίπλα στο αλλαγμένο κελί, αλλά όπως συζητήθηκε προηγουμένως, δεν θέλετε να ξεκινήσετε να δημιουργείτε ένα βρόχο γεγονότων.
12345 | Private Sub Worksheet_Change (ByVal Target As Range)Αν Στόχος.Στήλη 2 Στη συνέχεια Έξοδος από ΥποActiveSheet.Cells (Target.Row, Target.Column + 1). Τιμή = _ActiveSheet.Cells (Target.Row, Target.Column). Τιμή * 1.1Τέλος υπο |
Σε αυτό το παράδειγμα, ο κώδικας θα λειτουργήσει μόνο εάν η τιμή εισαχθεί στη στήλη Β (στήλη 2). Εάν αυτό ισχύει, τότε θα προσθέσει 10% στον αριθμό και θα το τοποθετήσει στο επόμενο διαθέσιμο κελί
Φύλλο εργασίας πριν από το διπλό κλικ στο συμβάν
Αυτό το συμβάν θα απενεργοποιήσει τον κώδικα εάν ένας χρήστης κάνει διπλό κλικ σε ένα κελί. Αυτό μπορεί να είναι εξαιρετικά χρήσιμο για οικονομικές αναφορές, όπως ισολογισμό ή λογαριασμό λογαριασμού αποτελεσμάτων, όπου οι αριθμοί είναι πιθανό να αμφισβητηθούν από τους διαχειριστές, ειδικά αν η ουσία είναι αρνητική!
Μπορείτε να το χρησιμοποιήσετε για να παράσχετε μια διευκόλυνση αναλύσεων, έτσι ώστε όταν ο διαχειριστής αμφισβητεί έναν συγκεκριμένο αριθμό, το μόνο που έχουν να κάνουν είναι να κάνουν διπλό κλικ στον αριθμό και η ανάλυση εμφανίζεται ως μέρος της αναφοράς.
Αυτό είναι πολύ εντυπωσιακό από την πλευρά ενός χρήστη και τους σώζει συνεχώς να ρωτούν «γιατί αυτός ο αριθμός είναι τόσο μεγάλος;»
Θα χρειαστεί να γράψετε κώδικα για να μάθετε την επικεφαλίδα / κριτήρια για τον αριθμό (χρησιμοποιώντας τις ιδιότητες αντικειμένου Target) και, στη συνέχεια, να φιλτράρετε τα δεδομένα του πίνακα και, στη συνέχεια, να τα αντιγράψετε στην αναφορά.
Προγραμματισμός VBA | Το Code Generator λειτουργεί για εσάς!
Φύλλο εργασίας Ενεργοποίηση συμβάντος
Αυτό το συμβάν συμβαίνει όταν ο χρήστης μετακινείται από το ένα φύλλο στο άλλο. Ισχύει για το νέο φύλλο στο οποίο μεταβαίνει ο χρήστης.
Θα μπορούσε να χρησιμοποιηθεί για να διασφαλιστεί ότι το νέο φύλλο υπολογίζεται πλήρως πριν ο χρήστης αρχίσει να κάνει οτιδήποτε σε αυτό. Μπορεί επίσης να χρησιμοποιηθεί για τον εκ νέου υπολογισμό του συγκεκριμένου φύλλου χωρίς τον εκ νέου υπολογισμό ολόκληρου του βιβλίου εργασίας. Εάν το βιβλίο εργασίας είναι μεγάλο και έχει περίπλοκο τύπο, τότε ο εκ νέου υπολογισμός ενός φύλλου εξοικονομεί πολύ χρόνο
123 | Private Sub Worksheet_Activate ()ActiveSheet. ΥπολογίστεΤέλος υπο |
Active X Control Events (όχι εξαντλητικό)
Όπως συζητήθηκε προηγουμένως, μπορείτε να προσθέσετε στοιχεία ελέγχου Active X απευθείας σε ένα φύλλο εργασίας. Αυτά μπορεί να είναι κουμπιά εντολών, αναπτυσσόμενα μενού και πλαίσια λίστας
Τα συμβάντα Active X βρίσκονται κάτω από το συγκεκριμένο αντικείμενο ονόματος φύλλου (όπου προσθέσατε το στοιχείο ελέγχου) στο VBE Project Explorer. Θα χρειαστεί να επιλέξετε το όνομα του στοιχείου ελέγχου Active X στο πρώτο αναπτυσσόμενο μενού στο παράθυρο κωδικού και στη συνέχεια το δεύτερο αναπτυσσόμενο μενού θα σας δείξει όλα τα διαθέσιμα συμβάντα
Κουμπί εντολών Κάντε κλικ στο συμβάν
Όταν έχετε τοποθετήσει ένα κουμπί εντολών σε ένα υπολογιστικό φύλλο, θα θέλετε να κάνει κάποια ενέργεια. Αυτό μπορείτε να το κάνετε βάζοντας κώδικα στο συμβάν Click.
Μπορείτε εύκολα να βάλετε ένα μήνυμα «Είστε σίγουροι;
12345 | Private Sub CommandButton1_Click ()Dim ButtonRet As VariantButtonRet = MsgBox ("Είστε βέβαιοι ότι θέλετε να το κάνετε αυτό;", vbQuestion v vb ΝαιΌχι)Εάν ButtonRet = vbNo Στη συνέχεια, κάντε έξοδο από το SubΤέλος υπο |
Drop Down (Combo Box) Αλλαγή συμβάντος
Ένα αναπτυσσόμενο Active X έχει ένα συμβάν αλλαγής, έτσι ώστε εάν ένας χρήστης επιλέξει ένα συγκεκριμένο στοιχείο από την αναπτυσσόμενη λίστα, μπορείτε να καταγράψετε την επιλογή του χρησιμοποιώντας αυτό το συμβάν και στη συνέχεια να γράψετε κώδικα για να προσαρμόσετε ανάλογα άλλα μέρη του φύλλου ή του βιβλίου εργασίας.
123 | Private Sub ComboBox1_Change ()MsgBox "Επιλέξατε" & ComboBox1.TextΤέλος υπο |
Προγραμματισμός VBA | Το Code Generator λειτουργεί για εσάς!
Tick Box (πλαίσιο ελέγχου) Κάντε κλικ στο συμβάν
Μπορείτε να προσθέσετε ένα τικ ή πλαίσιο ελέγχου σε ένα φύλλο εργασίας, ώστε να παρέχετε επιλογές επιλογών για το χρήστη. Μπορείτε να χρησιμοποιήσετε το συμβάν κλικ σε αυτό για να δείτε αν ο χρήστης έχει αλλάξει κάτι σε αυτό. Οι τιμές που επιστρέφονται είναι σωστές ή λανθασμένες ανάλογα με το αν έχει επισημανθεί ή όχι.
123 | Private Sub CheckBox1_Click ()MsgBox CheckBox1.ValueΤέλος υπο |
UserForm Συμβάντα (όχι εξαντλητικά)
Το Excel παρέχει τη δυνατότητα να σχεδιάσετε τις δικές σας φόρμες. Αυτά μπορεί να είναι πολύ χρήσιμα για χρήση ως αναδυόμενα παράθυρα για τη συλλογή πληροφοριών ή για την παροχή πολλαπλών επιλογών στο χρήστη. Χρησιμοποιούν στοιχεία ελέγχου Active X όπως περιγράφηκε προηγουμένως και έχουν ακριβώς τα ίδια συμβάντα, αν και τα συμβάντα εξαρτώνται σε μεγάλο βαθμό από τον τύπο του στοιχείου ελέγχου.
Εδώ είναι ένα παράδειγμα μιας απλής φόρμας:
Όταν εμφανίζεται αυτό είναι αυτό που φαίνεται στην οθόνη
Θα χρησιμοποιούσατε συμβάντα στη φόρμα για να κάνετε πράγματα όπως εισαγωγή ενός προεπιλεγμένου ονόματος εταιρείας κατά το άνοιγμα της φόρμας, για να ελέγξετε ότι η εισαγωγή ονόματος εταιρείας συμφωνεί με μία ήδη στο υπολογιστικό φύλλο και δεν έχει ορθογραφηθεί, και για να προσθέσετε κώδικα στο κλικ συμβάντα στα κουμπιά "OK" και "Cancel"
Μπορείτε να δείτε τον κώδικα και τα συμβάντα πίσω από τη φόρμα κάνοντας διπλό κλικ οπουδήποτε στη φόρμα
Το πρώτο αναπτυσσόμενο μενού δίνει πρόσβαση σε όλα τα στοιχεία ελέγχου στη φόρμα. Το δεύτερο αναπτυσσόμενο μενού θα δώσει πρόσβαση στα συμβάντα
UserForm Ενεργοποίηση συμβάντος
Αυτό το συμβάν ενεργοποιείται όταν η φόρμα είναι ενεργοποιημένη, συνήθως όταν εμφανίζεται. Αυτό το συμβάν μπορεί να χρησιμοποιηθεί για τη ρύθμιση προεπιλεγμένων τιμών π.χ. ένα προεπιλεγμένο όνομα εταιρείας στο πλαίσιο κειμένου της εταιρείας
123 | Private Sub UserForm_Activate ()TextBox1.Text = "Το όνομα της εταιρείας μου"Τέλος υπο |
Προγραμματισμός VBA | Το Code Generator λειτουργεί για εσάς!
Αλλαγή συμβάντος
Τα περισσότερα από τα στοιχεία ελέγχου στη φόρμα έχουν ένα συμβάν αλλαγής, αλλά σε αυτό το παράδειγμα, το πλαίσιο κειμένου της εταιρείας μπορεί να χρησιμοποιήσει το συμβάν για να περιορίσει τη διάρκεια του ονόματος της εταιρείας που εισάγεται
123456 | Private Sub TextBox1_Change ()Εάν Len (TextBox1.Text)> 20 ΤότεMsgBox "Το όνομα περιορίζεται σε 20 χαρακτήρες", vbCriticalTextBox1.Text = ""Τέλος εανΤέλος υπο |
Κάντε κλικ στο συμβάν
Μπορείτε να χρησιμοποιήσετε αυτό το συμβάν για να αναλάβετε δράση από το χρήστη κάνοντας κλικ στα στοιχεία ελέγχου της φόρμας, ή ακόμα και στην ίδια τη φόρμα
Σε αυτήν τη φόρμα υπάρχει ένα κουμπί «ΟΚ» και αφού έχουμε συλλέξει ένα όνομα εταιρείας, θα θέλαμε να το τοποθετήσουμε σε ένα κελί στο υπολογιστικό φύλλο για μελλοντική αναφορά
1234 | Private Sub CommandButton1_Click ()ActiveSheet.Range ("A1"). Τιμή = TextBox1..TextΕγώ. ΚρύψουΤέλος υπο |
Αυτός ο κώδικας λειτουργεί όταν ο χρήστης κάνει κλικ στο κουμπί "OK". Τοποθετεί την τιμή στο πλαίσιο εισαγωγής ονόματος εταιρείας στο κελί A1 στο ενεργό φύλλο και, στη συνέχεια, αποκρύπτει τη φόρμα έτσι ώστε ο έλεγχος χρήστη να επιστρέφει στο φύλλο εργασίας.
Διάγραμμα γεγονότων
Τα συμβάντα γραφήματος λειτουργούν μόνο σε γραφήματα που βρίσκονται σε ξεχωριστό φύλλο γραφημάτων και όχι σε ένα γράφημα που έχει ενσωματωθεί σε ένα τυπικό φύλλο εργασίας
Τα συμβάντα γραφήματος είναι κάπως περιορισμένα και δεν μπορούν να χρησιμοποιηθούν σε ένα φύλλο εργασίας όπου μπορεί να έχετε πολλαπλά γραφήματα. Επίσης, οι χρήστες δεν θέλουν απαραίτητα να μεταβούν από ένα φύλλο εργασίας που περιέχει αριθμούς σε ένα φύλλο γραφήματος - δεν υπάρχει άμεσος οπτικός αντίκτυπος εδώ
Το πιο χρήσιμο συμβάν θα ήταν να μάθετε το στοιχείο ενός γραφήματος στο οποίο έχει κάνει κλικ ένας χρήστης π.χ. ένα τμήμα σε ένα διάγραμμα πίτας ή μια ράβδο σε ένα γράφημα ράβδων, αλλά αυτό δεν είναι ένα συμβάν διαθέσιμο στο τυπικό εύρος συμβάντων.
Αυτό το πρόβλημα μπορεί να λυθεί χρησιμοποιώντας μια ενότητα κλάσης για να προσθέσετε ένα συμβάν «Ποντίκι κάτω» το οποίο θα επιστρέψει λεπτομέρειες για το στοιχείο γραφήματος στο οποίο έχει κάνει κλικ ο χρήστης. Αυτό χρησιμοποιείται σε ένα γράφημα μέσα σε ένα φύλλο εργασίας.
Αυτό περιλαμβάνει κάποια πολύ περίπλοκη κωδικοποίηση, αλλά τα αποτελέσματα είναι θεαματικά. Μπορείτε να δημιουργήσετε drill downs π.χ. ο χρήστης κάνει κλικ σε ένα τμήμα γραφήματος πίτας και αμέσως αυτό το γράφημα είναι κρυμμένο και ένα δεύτερο γράφημα εμφανίζεται στη θέση του που δείχνει ένα διάγραμμα πίτας με λεπτομέρειες για το αρχικό τμήμα ή μπορείτε να δημιουργήσετε τα πίνακα δεδομένα που υποστηρίζουν αυτό το τμήμα του γραφήματος πίτας.
Εκδηλώσεις εφαρμογής
Μπορείτε να χρησιμοποιήσετε το αντικείμενο εφαρμογής στο VBA για να απενεργοποιήσετε τον κώδικα σύμφωνα με ένα συγκεκριμένο συμβάν
Προγραμματισμός VBA | Το Code Generator λειτουργεί για εσάς!
Application.OnTime
Αυτό μπορεί να σας επιτρέψει να ενεργοποιήσετε ένα κομμάτι κώδικα σε τακτά χρονικά διαστήματα για όσο διάστημα το βιβλίο εργασίας είναι φορτωμένο στο Excel. Μπορεί να θέλετε να αποθηκεύετε αυτόματα το βιβλίο εργασίας σας σε διαφορετικό φάκελο κάθε 10 λεπτά ή να αφήνετε το φύλλο εργασίας να λειτουργεί όλη τη νύχτα, ώστε να εισάγετε τα πιο πρόσφατα δεδομένα από εξωτερική πηγή.
Σε αυτό το παράδειγμα, μια υπορουτίνα εισάγεται σε μια ενότητα. Εμφανίζει ένα πλαίσιο μηνυμάτων κάθε 5 λεπτά, αν και αυτό θα μπορούσε εύκολα να είναι μια άλλη κωδικοποιημένη διαδικασία. Ταυτόχρονα, επαναφέρει το χρονόμετρο στην τρέχουσα ώρα συν 5 ακόμη λεπτά.
Κάθε φορά που λειτουργεί, το χρονόμετρο επανέρχεται για να εκτελέσει την ίδια δευτερεύουσα ρουτίνα σε άλλα 5 λεπτά.
1234 | Sub TestOnTime ()MsgBox "Δοκιμή OnTime"Application.OnTime (Τώρα () + TimeValue ("00:05:00")), "TestOnTime"Τέλος υπο |
Application.OnKey
Αυτή η λειτουργία σας δίνει τη δυνατότητα να σχεδιάσετε τα δικά σας πλήκτρα πρόσβασης. Μπορείτε να ορίσετε οποιαδήποτε κλήση συνδυασμού πλήκτρων ως υπορουτίνα της δημιουργίας σας.
Σε αυτό το παράδειγμα, το γράμμα "a" ανακατευθύνεται έτσι ώστε αντί να τοποθετεί ένα "a" σε ένα κελί, να εμφανίζει ένα πλαίσιο μηνυμάτων. Αυτός ο κωδικός πρέπει να τοποθετηθεί σε μια ενότητα που έχει εισαχθεί.
123456 | Sub TestKeyPress ()Application.OnKey "a", "TestKeyPress"Τέλος υποSub TestKeyPress ()MsgBox "Πιέσατε 'a'"Τέλος υπο |
Εκτελείτε την υπορουτίνα «TestKeyPress» πρώτα απ 'όλα. Χρειάζεται μόνο να το εκτελέσετε μία φορά. Λέει στο Excel ότι κάθε φορά που πιέζεται το γράμμα "α" θα ονομάζει την υπορουτίνα "TestKeyPress". Η υπορουτίνα «TestKeyPress» εμφανίζει ένα πλαίσιο μηνυμάτων για να σας πει ότι πατήσατε το πλήκτρο «a». Θα μπορούσε φυσικά να φορτώσει μια φόρμα ή να κάνει κάθε είδους άλλα πράγματα.
Μπορείτε να χρησιμοποιήσετε οποιονδήποτε συνδυασμό πλήκτρων που μπορείτε να χρησιμοποιήσετε με τη λειτουργία «SendKeys»
Για να ακυρώσετε αυτήν τη λειτουργία, εκτελέστε τη δήλωση "OnKey" χωρίς την παράμετρο "Διαδικασία".
123 | Sub CancelOnKey ()Application.OnKey "a"Τέλος υπο |
Όλα είναι πλέον πίσω στο φυσιολογικό.