Εάν προσπαθείτε να κατανοήσετε καλά το Excel VBA , πιθανότατα θα μπορούσατε να επωφεληθείτε από μερικά παραδείγματα για να αναπτύξετε αυτήν την οπτική βασική ικανότητα. Εδώ, μπορείτε να βρείτε μερικά παραδείγματα Excel VBA, ώστε να μπορέσετε να απολαύσετε αυτήν την επιχείρηση διαχείρισης εκδηλώσεων.
Παράδειγμα Excel VBA: Το συμβάν Open για ένα βιβλίο εργασίας
Ένα από τα πιο συχνά χρησιμοποιούμενα συμβάντα Excel VBA είναι το συμβάν Openbook Workbook. Ας υποθέσουμε ότι έχετε ένα βιβλίο εργασίας που χρησιμοποιείτε καθημερινά. Η διαδικασία Workbook_Open σε αυτό το παράδειγμα εκτελείται κάθε φορά που ανοίγει το βιβλίο εργασίας. Η διαδικασία ελέγχει την ημέρα της εβδομάδας. αν είναι Παρασκευή, ο κωδικός εμφανίζει ένα μήνυμα υπενθύμισης για εσάς.
Για να δημιουργήσετε τη διαδικασία Excel VBA που εκτελείται κάθε φορά που εμφανίζεται το συμβάν Openbook Workbook, ακολουθήστε τα εξής βήματα:
Ανοίξτε το βιβλίο εργασίας του Excel.
Οποιοδήποτε βιβλίο εργασίας του Excel θα κάνει.
Πατήστε Alt+F11 για να ενεργοποιήσετε το VBE.
Εντοπίστε το βιβλίο εργασίας στο παράθυρο Project.
Κάντε διπλό κλικ στο όνομα του έργου για να εμφανίσετε τα στοιχεία του, εάν χρειάζεται.
Κάντε διπλό κλικ στο στοιχείο ThisWorkbook.
Το VBE εμφανίζει ένα κενό παράθυρο κώδικα για το αντικείμενο ThisWorkbook.
Στο παράθυρο Κώδικας, επιλέξτε Βιβλίο εργασίας από την αναπτυσσόμενη λίστα Αντικείμενο (αριστερά).
Το VBE εισάγει τις δηλώσεις έναρξης και λήξης για μια διαδικασία Workbook_Open.
Εισαγάγετε τις ακόλουθες δηλώσεις, ώστε η πλήρης διαδικασία-συμβάντος να μοιάζει με αυτό:
Ιδιωτικό δευτερεύον βιβλίο εργασίας_Άνοιγμα()
Dim Msg As String
Αν Εβδομάδα (Τώρα) = 6 Τότε
Msg = "Σήμερα είναι Παρασκευή. Μην ξεχάσετε να "
Msg = Msg & "submit the TPS Report!"
MsgBox Msg
Τέλος εαν
End Sub
Το παράθυρο Κώδικας θα πρέπει να μοιάζει με αυτό.
Αυτή η διαδικασία χειρισμού συμβάντων εκτελείται όταν ανοίξει το βιβλίο εργασίας.
Workbook_Open εκτελείται αυτόματα κάθε φορά που ανοίγει το βιβλίο εργασίας. Χρησιμοποιεί τη συνάρτηση WeekDay του VBA για να καθορίσει την ημέρα της εβδομάδας. Εάν είναι Παρασκευή (ημέρα 6), ένα πλαίσιο μηνύματος υπενθυμίζει στον χρήστη να υποβάλει μια αναφορά. Αν δεν είναι Παρασκευή, δεν γίνεται τίποτα.
Εάν σήμερα δεν είναι Παρασκευή, μπορεί να δυσκολευτείτε να δοκιμάσετε αυτήν τη διαδικασία. Μπορείτε απλώς να αλλάξετε το 6 ώστε να αντιστοιχεί στον πραγματικό αριθμό ημέρας της ημέρας.
Και φυσικά, μπορείτε να τροποποιήσετε αυτή τη διαδικασία με όποιον τρόπο θέλετε. Για παράδειγμα, η ακόλουθη έκδοση εμφανίζει ένα μήνυμα κάθε φορά που ανοίγει το βιβλίο εργασίας. Αυτό γίνεται ενοχλητικό μετά από λίγο.
Μια διαδικασία Workbook_Open μπορεί να κάνει σχεδόν τα πάντα. Αυτοί οι χειριστές συμβάντων χρησιμοποιούνται συχνά για τα ακόλουθα:
- Εμφάνιση μηνυμάτων καλωσορίσματος (όπως στο ωραίο βιβλίο εργασίας του Frank)
- Άνοιγμα άλλων βιβλίων εργασίας
- Ενεργοποίηση συγκεκριμένου φύλλου εργασίας στο βιβλίο εργασίας
- Ρύθμιση προσαρμοσμένων μενού συντομεύσεων
Ακολουθεί ένα τελευταίο παράδειγμα Excel VBA μιας διαδικασίας Workbook_Open που χρησιμοποιεί τις συναρτήσεις GetSetting και SaveSetting για να παρακολουθεί πόσες φορές έχει ανοίξει το βιβλίο εργασίας. Η συνάρτηση SaveSetting γράφει μια τιμή στο μητρώο των Windows και η συνάρτηση GetSetting ανακτά αυτήν την τιμή (ανατρέξτε στο σύστημα Βοήθειας για λεπτομέρειες). Το ακόλουθο παράδειγμα Excel VBA ανακτά την καταμέτρηση από το μητρώο, την αυξάνει και στη συνέχεια την αποθηκεύει ξανά στο μητρώο. Λέει επίσης στον χρήστη την τιμή του Cnt που αντιστοιχεί στον αριθμό των φορών που έχει ανοίξει το βιβλίο εργασίας.
Ιδιωτικό δευτερεύον βιβλίο εργασίας_Άνοιγμα()
Dim Cnt As Long
Cnt = GetSetting ("MyApp", "Settings", "Open", 0)
Cnt = Cnt + 1
SaveSetting "MyApp", "Settings", "Open", Cnt
MsgBox "Αυτό το βιβλίο εργασίας έχει ανοίξει " & Cnt & " φορές."
End Sub
Χρήση ενός προγράμματος χειρισμού συμβάντων Workbook_Open για να παρακολουθείτε πόσες φορές έχει ανοίξει ένα βιβλίο εργασίας.
Παράδειγμα Excel VBA: Το συμβάν BeforeClose για ένα βιβλίο εργασίας
Ακολουθεί ένα παράδειγμα της διαδικασίας χειρισμού συμβάντων του Excel VBA Workbook_BeforeClose, η οποία εκτελείται αυτόματα αμέσως πριν κλείσει το βιβλίο εργασίας. Αυτή η διαδικασία βρίσκεται στο παράθυρο Κώδικας για ένα αντικείμενο ThisWorkbook:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim Msg As String
Dim Ans As Long
Dim FName As String
Msg = "Θέλετε να δημιουργήσετε αντίγραφο ασφαλείας αυτού του αρχείου;"
Ans = MsgBox(Msg, vbYesNo)
Αν Ans = vbYes Τότε
FName = "F:\BACKUP\" & This Workbook.Name
ThisWorkbook.SaveCopyAs FName
Τέλος εαν
End Sub
Αυτή η ρουτίνα χρησιμοποιεί ένα πλαίσιο μηνύματος για να ρωτήσει τον χρήστη εάν θα ήθελε να δημιουργήσει ένα αντίγραφο ασφαλείας του βιβλίου εργασίας. Εάν η απάντηση είναι ναι, ο κώδικας χρησιμοποιεί τη μέθοδο SaveCopyAs για να αποθηκεύσει ένα αντίγραφο ασφαλείας του αρχείου στη μονάδα δίσκου F. Εάν προσαρμόσετε αυτήν τη διαδικασία για δική σας χρήση, πρέπει να αλλάξετε τη μονάδα δίσκου και τη διαδρομή.
Οι προγραμματιστές του Excel χρησιμοποιούν συχνά μια διαδικασία Workbook_BeforeClose για να καθαρίσουν τον εαυτό τους. Για παράδειγμα, εάν χρησιμοποιείτε μια διαδικασία Workbook_Open για να αλλάξετε ορισμένες ρυθμίσεις όταν ανοίγετε ένα βιβλίο εργασίας (απόκρυψη της γραμμής κατάστασης, για παράδειγμα), είναι σκόπιμο να επαναφέρετε τις ρυθμίσεις στην αρχική τους κατάσταση όταν κλείνετε το βιβλίο εργασίας. Μπορείτε να εκτελέσετε αυτήν την ηλεκτρονική υπηρεσία καθαρισμού με μια διαδικασία Workbook_BeforeClose.
Όταν χρησιμοποιείτε το συμβάν Workbook_BeforeClose, έχετε υπόψη το εξής: Εάν κλείσετε το Excel και οποιοδήποτε ανοιχτό αρχείο έχει αλλάξει από την τελευταία αποθήκευση, το Excel εμφανίζει το συνηθισμένο πλαίσιο μηνύματος "Θέλετε να αποθηκεύσετε τις αλλαγές σας". Κάνοντας κλικ στο κουμπί Ακύρωση ακυρώνεται ολόκληρη η διαδικασία κλεισίματος. Αλλά το συμβάν Workbook_BeforeClose θα έχει εκτελεστεί ούτως ή άλλως.
Παράδειγμα Excel VBA: Το συμβάν BeforeSave για ένα βιβλίο εργασίας
Το συμβάν BeforeSave, όπως υποδηλώνει το όνομά του, ενεργοποιείται πριν από την αποθήκευση ενός βιβλίου εργασίας. Αυτό το συμβάν εμφανίζεται όταν επιλέγετε Αρχείο → Αποθήκευση ή Αρχείο → Αποθήκευση ως.
Η ακόλουθη διαδικασία, η οποία τοποθετείται στο παράθυρο Code για ένα αντικείμενο ThisWorkbook, δείχνει το συμβάν BeforeSave. Η ρουτίνα ενημερώνει την τιμή σε ένα κελί (κελί A1 στο Φύλλο1) κάθε φορά που αποθηκεύεται το βιβλίο εργασίας. Με άλλα λόγια, το κελί A1 χρησιμεύει ως μετρητής για να παρακολουθείτε πόσες φορές αποθηκεύτηκε το αρχείο.
Ιδιωτικό δευτερεύον βιβλίο εργασίας_BeforeSave(ByVal SaveAsUI _
Ως Boolean, Cancel As Boolean)
Dim Counter As Range
Set Counter = Sheets("Sheet1").Range("A1")
Counter.Value = Counter.Value + 1
End Sub
Σημειώστε ότι η διαδικασία Workbook_BeforeSave έχει δύο ορίσματα: SaveAsUI και Cancel. Για να δείξετε πώς λειτουργούν αυτά τα ορίσματα, εξετάστε την ακόλουθη μακροεντολή, η οποία εκτελείται πριν από την αποθήκευση του βιβλίου εργασίας. Αυτή η διαδικασία επιχειρεί να εμποδίσει τον χρήστη να αποθηκεύσει το βιβλίο εργασίας με διαφορετικό όνομα. Εάν ο χρήστης επιλέξει Αρχείο → Αποθήκευση ως, το όρισμα SaveAsUI είναι True.
Όταν εκτελείται ο κώδικας, ελέγχει την τιμή SaveAsUI. Εάν αυτή η μεταβλητή είναι True, η διαδικασία εμφανίζει ένα μήνυμα και ορίζει το Cancel σε True, το οποίο ακυρώνει τη λειτουργία Save.
Ιδιωτικό δευτερεύον βιβλίο εργασίας_BeforeSave(ByVal SaveAsUI _
Ως Boolean, Cancel As Boolean)
Αν SaveAsUI Τότε
MsgBox "Δεν μπορείτε να αποθηκεύσετε ένα αντίγραφο αυτού του βιβλίου εργασίας!"
Ακύρωση = Αληθινό
Τέλος εαν
End Sub
Σημειώστε ότι αυτή η διαδικασία δεν θα εμποδίσει κανέναν να αποθηκεύσει ένα αντίγραφο με διαφορετικό όνομα. Εάν κάποιος θέλει πραγματικά να το κάνει, μπορεί απλώς να ανοίξει το βιβλίο εργασίας με τις μακροεντολές απενεργοποιημένες. Όταν οι μακροεντολές είναι απενεργοποιημένες, οι διαδικασίες χειρισμού συμβάντων είναι επίσης απενεργοποιημένες, κάτι που είναι λογικό γιατί, τελικά, είναι μακροεντολές.