Διαδικασίες "Function" και "Sub" στο VBA

Περιεχόμενα

Ενσωματωμένες λειτουργίες VBA

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

Μια λίστα με αυτές τις λειτουργίες μπορεί να προβληθεί στον επεξεργαστή VBA:

  • Ανοίξτε ένα βιβλίο εργασίας του Excel και ξεκινήστε το πρόγραμμα επεξεργασίας VBA (κάντε κλικ για να το κάνετε αυτό Alt + F11) και μετά πατήστε F2.
  • Επιλέξτε μια βιβλιοθήκη από την αναπτυσσόμενη λίστα στο επάνω αριστερό μέρος της οθόνης VBA.
  • Θα εμφανιστεί μια λίστα με ενσωματωμένες κλάσεις και συναρτήσεις VBA. Κάντε κλικ στο όνομα της συνάρτησης για να εμφανιστεί η σύντομη περιγραφή της στο κάτω μέρος του παραθύρου. πάτημα F1 θα ανοίξει τη σελίδα ηλεκτρονικής βοήθειας για αυτήν τη δυνατότητα.

Επιπλέον, μια πλήρης λίστα των ενσωματωμένων συναρτήσεων VBA με παραδείγματα μπορείτε να βρείτε στο Κέντρο προγραμματιστών της Visual Basic.

Προσαρμοσμένες διαδικασίες "Function" και "Sub" στο VBA

Στο Excel Visual Basic, ένα σύνολο εντολών που εκτελούν μια συγκεκριμένη εργασία τοποθετείται σε μια διαδικασία. Λειτουργία (Λειτουργία) ή Σε (Υπορουτίνα). Η κύρια διαφορά μεταξύ των διαδικασιών Λειτουργία и Σε είναι αυτή η διαδικασία Λειτουργία επιστρέφει αποτέλεσμα, διαδικασία Σε - δεν.

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

Επιχειρήματα

Διάφορα δεδομένα μπορούν να μεταβιβαστούν σε διαδικασίες VBA χρησιμοποιώντας ορίσματα. Η λίστα ορισμάτων καθορίζεται κατά τη δήλωση μιας διαδικασίας. Για παράδειγμα, η διαδικασία Σε στο VBA προσθέτει τον δεδομένο ακέραιο (Integer) σε κάθε κελί της επιλεγμένης περιοχής. Μπορείτε να περάσετε αυτόν τον αριθμό στη διαδικασία χρησιμοποιώντας ένα όρισμα, όπως αυτό:

Sub AddToCells(i As Integer) ... End Sub

Λάβετε υπόψη ότι έχετε επιχειρήματα για διαδικασίες Λειτουργία и Σε στο VBA είναι προαιρετικό. Ορισμένες διαδικασίες δεν απαιτούν επιχειρήματα.

Προαιρετικά επιχειρήματα

Οι διαδικασίες VBA μπορούν να έχουν προαιρετικά ορίσματα. Αυτά είναι ορίσματα που ο χρήστης μπορεί να καθορίσει εάν θέλει και εάν παραληφθούν, η διαδικασία χρησιμοποιεί τις προεπιλεγμένες τιμές για αυτά.

Επιστρέφοντας στο προηγούμενο παράδειγμα, για να γίνει ένα ακέραιο όρισμα σε μια συνάρτηση προαιρετικό, θα δηλωθεί ως εξής:

Sub AddToCells (Προαιρετικό i As Integer = 0)

Σε αυτή την περίπτωση, το όρισμα ακέραιος i η προεπιλογή θα είναι 0.

Μπορεί να υπάρχουν πολλά προαιρετικά ορίσματα σε μια διαδικασία, τα οποία παρατίθενται στο τέλος της λίστας ορισμάτων.

Διαβίβαση ορισμάτων κατά τιμή και με αναφορά

Τα επιχειρήματα στο VBA μπορούν να περάσουν σε μια διαδικασία με δύο τρόπους:

  • ByVal – περνώντας ένα όρισμα κατά τιμή. Αυτό σημαίνει ότι μόνο η τιμή (δηλαδή, ένα αντίγραφο του ορίσματος) μεταβιβάζεται στη διαδικασία και επομένως τυχόν αλλαγές που γίνονται στο όρισμα εντός της διαδικασίας θα χαθούν όταν η διαδικασία τερματιστεί.
  • Από τον Ref – μετάδοση ενός επιχειρήματος με αναφορά. Δηλαδή, η πραγματική διεύθυνση της θέσης του ορίσματος στη μνήμη μεταβιβάζεται στη διαδικασία. Οποιεσδήποτε αλλαγές γίνονται σε ένα όρισμα εντός της διαδικασίας θα αποθηκευτούν όταν η διαδικασία τερματιστεί.

Χρήση λέξεων-κλειδιών ByVal or Από τον Ref στη δήλωση διαδικασίας, μπορείτε να καθορίσετε πώς μεταβιβάζεται το όρισμα στη διαδικασία. Αυτό φαίνεται στα παρακάτω παραδείγματα:

Sub AddToCells(ByVal i As Integer) ... End Sub
Σε αυτή την περίπτωση, το όρισμα ακέραιος i πέρασε κατά αξία. Μετά την έξοδο από τη διαδικασία Σε όλα φτιαγμένα με i οι αλλαγές θα χαθούν.
Sub AddToCells(ByRef i As Integer) ... End Sub
Σε αυτή την περίπτωση, το όρισμα ακέραιος i πέρασε με παραπομπή. Μετά την έξοδο από τη διαδικασία Σε όλα φτιαγμένα με i οι αλλαγές θα αποθηκευτούν στη μεταβλητή που μεταβιβάστηκε στη διαδικασία Σε.

Θυμηθείτε ότι τα ορίσματα στο VBA μεταβιβάζονται με αναφορά από προεπιλογή. Με άλλα λόγια, εάν δεν χρησιμοποιούνται λέξεις-κλειδιά ByVal or Από τον Ref, τότε το όρισμα θα περάσει με αναφορά.

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

Διαδικασία VBA «Λειτουργία»

Ο επεξεργαστής VBA αναγνωρίζει τη διαδικασία Λειτουργίαόταν συναντά μια ομάδα εντολών που περικλείονται μεταξύ των ακόλουθων εντολών ανοίγματος και κλεισίματος:

Λειτουργία ... Τελική Λειτουργία

Όπως αναφέρθηκε προηγουμένως, η διαδικασία Λειτουργία σε VBA (σε αντίθεση με Σε) επιστρέφει μια τιμή. Οι ακόλουθοι κανόνες ισχύουν για τις επιστρεφόμενες τιμές:

  • Ο τύπος δεδομένων της τιμής επιστροφής πρέπει να δηλωθεί στην κεφαλίδα της διαδικασίας Λειτουργία.
  • Η μεταβλητή που περιέχει την επιστρεφόμενη τιμή πρέπει να ονομάζεται ίδια με τη διαδικασία Λειτουργία. Αυτή η μεταβλητή δεν χρειάζεται να δηλωθεί χωριστά, καθώς υπάρχει πάντα ως αναπόσπαστο μέρος της διαδικασίας. Λειτουργία.

Αυτό φαίνεται καλά στο ακόλουθο παράδειγμα.

Παράδειγμα συνάρτησης VBA: Εκτέλεση μαθηματικής πράξης σε 3 αριθμούς

Το παρακάτω είναι ένα παράδειγμα κώδικα διαδικασίας VBA Λειτουργία, το οποίο παίρνει τρία ορίσματα τύπου Διπλό (αριθμοί κινητής υποδιαστολής διπλής ακρίβειας). Ως αποτέλεσμα, η διαδικασία επιστρέφει έναν άλλο αριθμό τύπου Διπλόίσο με το άθροισμα των δύο πρώτων ορισμάτων μείον το τρίτο όρισμα:

Συνάρτηση SumMinus(dNum1 As Double, dNum2 as Double, dNum3 as Double) As Double SumMinus = dNum1 + dNum2 - dNum3 Τελική συνάρτηση

Αυτή η πολύ απλή διαδικασία VBA Λειτουργία επεξηγεί πώς τα δεδομένα μεταβιβάζονται σε μια διαδικασία μέσω ορισμάτων. Μπορείτε να δείτε ότι ο τύπος δεδομένων που επιστρέφεται από τη διαδικασία ορίζεται ως Διπλό (λένε οι λέξεις Ως Διπλό μετά τη λίστα των επιχειρημάτων). Αυτό το παράδειγμα δείχνει επίσης πώς το αποτέλεσμα της διαδικασίας Λειτουργία αποθηκευμένο σε μια μεταβλητή με το ίδιο όνομα με το όνομα της διαδικασίας.

Ονομασία της διαδικασίας VBA "Λειτουργία"

Εάν η παραπάνω απλή διαδικασία Λειτουργία που εισάγεται σε μια λειτουργική μονάδα στο πρόγραμμα επεξεργασίας της Visual Basic, μπορεί να κληθεί από άλλες διαδικασίες VBA ή να χρησιμοποιηθεί σε ένα φύλλο εργασίας σε ένα βιβλίο εργασίας του Excel.

Καλέστε τη διαδικασία VBA "Function" από μια άλλη διαδικασία

Διαδικασία Λειτουργία μπορεί να κληθεί από μια άλλη διαδικασία VBA αναθέτοντας απλώς αυτή τη διαδικασία σε μια μεταβλητή. Το ακόλουθο παράδειγμα δείχνει μια κλήση σε μια διαδικασία Summinus, που ορίστηκε παραπάνω.

Sub main() Dim total ως Double total = SumMinus(5, 4, 3) End Sub

Καλέστε τη διαδικασία VBA "Function" από ένα φύλλο εργασίας

Διαδικασία VBA Λειτουργία μπορεί να κληθεί από ένα φύλλο εργασίας του Excel με τον ίδιο τρόπο όπως οποιαδήποτε άλλη ενσωματωμένη συνάρτηση του Excel. Επομένως, η διαδικασία που δημιουργήθηκε στο προηγούμενο παράδειγμα Λειτουργία - Summinus μπορεί να κληθεί εισάγοντας την ακόλουθη έκφραση σε ένα κελί φύλλου εργασίας:

=SumMinus(10, 5, 2)

Διαδικασία VBA «Sub»

Ο επεξεργαστής VBA καταλαβαίνει ότι υπάρχει μια διαδικασία μπροστά του Σεόταν συναντά μια ομάδα εντολών που περικλείονται μεταξύ των ακόλουθων εντολών ανοίγματος και κλεισίματος:

Υπο ... Τέλος Υπ

Διαδικασία VBA "Sub": Παράδειγμα 1. Η στοίχιση στο κέντρο και το μέγεθος γραμματοσειράς αλλάζουν σε μια επιλεγμένη περιοχή κελιών

Εξετάστε ένα παράδειγμα μιας απλής διαδικασίας VBA Σε, αποστολή του οποίου είναι να αλλάξει τη μορφοποίηση της επιλεγμένης περιοχής κελιών. Τα κελιά είναι κεντραρισμένα (τόσο κάθετα όσο και οριζόντια) και το μέγεθος της γραμματοσειράς αλλάζει στο καθορισμένο από τον χρήστη:

Sub Format_Center_And_Sized(Προαιρετικό iFontSize As Integer = 10) Selection.HorizontalAlignment = xlCenter Selection.VerticalAlignment = xlCenter Selection.Font.Size = iFontSize End Sub

Αυτή η διαδικασία Σε εκτελεί ενέργειες αλλά δεν επιστρέφει αποτέλεσμα.

Αυτό το παράδειγμα χρησιμοποιεί επίσης ένα όρισμα Προαιρετικό Μέγεθος γραμματοσειράς. Αν το επιχείρημα Μέγεθος γραμματοσειράς δεν πέρασε στη διαδικασία Σε, τότε η προεπιλεγμένη τιμή του είναι 10. Ωστόσο, εάν το όρισμα Μέγεθος γραμματοσειράς πέρασε στη διαδικασία Σε, τότε η επιλεγμένη περιοχή κελιών θα οριστεί στο μέγεθος γραμματοσειράς που καθορίζει ο χρήστης.

Υποδιαδικασία VBA: Παράδειγμα 2: Στοίχιση στο κέντρο και έντονη γραμματοσειρά σε επιλεγμένο εύρος κελιών

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

Sub Format_Center_And_Bold() Selection.HorizontalAlignment = xlCenter Selection.VerticalAlignment = xlCenter Selection.Font.Bold = True End Sub

Διαδικασία κλήσης «Sub» στο Excel VBA

Καλέστε τη διαδικασία VBA "Sub" από άλλη διαδικασία

Για να καλέσετε μια διαδικασία VBA Σε από μια άλλη διαδικασία VBA, πρέπει να γράψετε τη λέξη-κλειδί Καλέστε, όνομα διαδικασίας Σε και πιο κάτω σε παρένθεση είναι τα επιχειρήματα της διαδικασίας. Αυτό φαίνεται στο παρακάτω παράδειγμα:

Sub main() Call Format_Centred_And_Sized(20) End Sub

Εάν η διαδικασία Μορφή_Κεντροποιημένο_και_Μέγεθος έχει περισσότερα από ένα ορίσματα, πρέπει να διαχωριστούν με κόμμα. Σαν αυτό:

Sub main() Call Format_Centred_And_Sized(arg1, arg2, ...) End Sub

Καλέστε τη διαδικασία VBA "Sub" από το φύλλο εργασίας

Διαδικασία Σε δεν μπορεί να εισαχθεί απευθείας σε ένα κελί φύλλου Excel, όπως μπορεί να γίνει με μια διαδικασία Λειτουργίαγιατί η διαδικασία Σε δεν επιστρέφει τιμή. Ωστόσο, διαδικασίες Σε, τα οποία δεν έχουν ορίσματα και δηλώνονται ως Δημόσιο (όπως φαίνεται παρακάτω) θα είναι διαθέσιμο στους χρήστες του φύλλου εργασίας. Έτσι, εάν οι απλές διαδικασίες που συζητήθηκαν παραπάνω Σε εισάγεται σε μια λειτουργική μονάδα του Visual Basic Editor, η διαδικασία Format_Centered_And_Bold θα είναι διαθέσιμο για χρήση σε ένα φύλλο εργασίας του Excel και η διαδικασία Μορφή_Κεντροποιημένο_και_Μέγεθος – δεν θα είναι διαθέσιμο γιατί έχει επιχειρήματα.

Εδώ είναι ένας εύκολος τρόπος εκτέλεσης (ή εκτέλεσης) μιας διαδικασίας Σε, προσβάσιμο από το φύλλο εργασίας:

  • Τύπος Alt + F8 (πατήστε το πλήκτρο άλλος και ενώ το κρατάτε πατημένο, πατήστε το πλήκτρο F8).
  • Στη λίστα με τις μακροεντολές που εμφανίζεται, επιλέξτε αυτή που θέλετε να εκτελέσετε.
  • Τύπος τρέξιμο (τρέξιμο)

Για να εκτελέσετε μια διαδικασία Σε γρήγορα και εύκολα, μπορείτε να του αντιστοιχίσετε μια συντόμευση πληκτρολογίου. Για αυτό:

  • Τύπος Alt + F8.
  • Στη λίστα με τις μακροεντολές που εμφανίζεται, επιλέξτε αυτήν στην οποία θέλετε να αντιστοιχίσετε μια συντόμευση πληκτρολογίου.
  • Τύπος παράμετροι (Επιλογές) και στο παράθυρο διαλόγου που εμφανίζεται, εισαγάγετε τη συντόμευση πληκτρολογίου.
  • Τύπος OK και κλείστε το παράθυρο διαλόγου Macro (Μακροεντολή).

Προσοχή: Όταν εκχωρείτε μια συντόμευση πληκτρολογίου σε μια μακροεντολή, βεβαιωθείτε ότι δεν χρησιμοποιείται ως τυπική στο Excel (για παράδειγμα, Ctrl + C). Εάν επιλέξετε μια ήδη υπάρχουσα συντόμευση πληκτρολογίου, θα αντιστοιχιστεί εκ νέου στη μακροεντολή και ως αποτέλεσμα, ο χρήστης μπορεί να ξεκινήσει τη μακροεντολή κατά λάθος.

Πεδίο εφαρμογής της διαδικασίας VBA

Το μέρος 2 αυτού του σεμιναρίου εξέτασε το εύρος των μεταβλητών και των σταθερών και τον ρόλο των λέξεων-κλειδιών. Δημόσιο и Private. Αυτές οι λέξεις-κλειδιά μπορούν επίσης να χρησιμοποιηθούν με διαδικασίες VBA:

Public Sub AddToCells(i As Integer) ... End Sub
Εάν της δήλωσης διαδικασίας προηγείται η λέξη-κλειδί Δημόσιο, τότε η διαδικασία θα είναι διαθέσιμη σε όλες τις ενότητες σε αυτό το έργο VBA.
Private Sub AddToCells(i As Integer) ... End Sub
Εάν της δήλωσης διαδικασίας προηγείται η λέξη-κλειδί Private, τότε αυτή η διαδικασία θα είναι διαθέσιμη μόνο για την τρέχουσα ενότητα. Δεν μπορεί να κληθεί ενώ βρίσκεται σε οποιαδήποτε άλλη λειτουργική μονάδα ή από ένα βιβλίο εργασίας του Excel.

Θυμηθείτε ότι εάν πριν δηλώσετε μια διαδικασία VBA Λειτουργία or Σε λέξη-κλειδί δεν έχει εισαχθεί, η προεπιλεγμένη ιδιότητα έχει οριστεί για τη διαδικασία Δημόσιο (δηλαδή, θα είναι διαθέσιμο παντού σε αυτό το έργο VBA). Αυτό έρχεται σε αντίθεση με τις δηλώσεις μεταβλητών, οι οποίες από προεπιλογή είναι Private.

Πρόωρη έξοδος από τις διαδικασίες VBA "Function" και "Sub"

Εάν πρέπει να τερματίσετε την εκτέλεση μιας διαδικασίας VBA Λειτουργία or Σε, χωρίς να περιμένουμε τη φυσική του κατάληξη, τότε για αυτό υπάρχουν τελεστές Λειτουργία εξόδου и Έξοδος Sub. Η χρήση αυτών των τελεστών φαίνεται παρακάτω χρησιμοποιώντας μια απλή διαδικασία ως παράδειγμα. ΛειτουργίαΑ που αναμένει να λάβει ένα θετικό επιχείρημα για να εκτελέσει περαιτέρω πράξεις. Εάν μια μη θετική τιμή μεταβιβαστεί στη διαδικασία, τότε δεν μπορούν να εκτελεστούν περαιτέρω λειτουργίες, επομένως στον χρήστη θα πρέπει να εμφανιστεί ένα μήνυμα σφάλματος και η διαδικασία θα πρέπει να τερματιστεί αμέσως:

Συνάρτηση VAT_Amount(sVAT_Rate As Single) As Single VAT_Amount = 0 Εάν sVAT_Rate <= 0 Τότε MsgBox "Αναμενόταν μια θετική τιμή του sVAT_Rate αλλά λήφθηκε " & sVAT_Rate Συνάρτηση εξόδου Τέλος εάν ... Τέλος συνάρτησης

Σημειώστε ότι πριν ολοκληρώσετε τη διαδικασία Λειτουργία - ΦΠΑ_Ποσό, μια ενσωματωμένη συνάρτηση VBA εισάγεται στον κώδικα MsgBox, το οποίο εμφανίζει ένα αναδυόμενο παράθυρο προειδοποίησης στον χρήστη.

Αφήστε μια απάντηση