Λειτουργία VBA - Κλήση, τιμή επιστροφής και παράμετροι

Αυτό το σεμινάριο θα σας διδάξει να δημιουργείτε και να χρησιμοποιείτε συναρτήσεις με και χωρίς παραμέτρους στο VBA

Το VBA περιέχει μεγάλο αριθμό ενσωματωμένων λειτουργιών για χρήση, αλλά μπορείτε επίσης να γράψετε τις δικές σας. Όταν γράφετε κώδικα σε VBA, μπορείτε να τον γράψετε σε μια υποδιαδικασία ή μια διαδικασία λειτουργίας. Μια διαδικασία συνάρτησης είναι σε θέση να επιστρέψει μια τιμή στον κωδικό σας. Αυτό είναι εξαιρετικά χρήσιμο εάν θέλετε το VBA να εκτελέσει μια εργασία για να επιστρέψει ένα αποτέλεσμα. Οι λειτουργίες VBA μπορούν επίσης να κληθούν από το εσωτερικό του Excel, όπως και οι ενσωματωμένες λειτουργίες του Excel.

Δημιουργία συνάρτησης χωρίς επιχειρήματα

Για να δημιουργήσετε μια συνάρτηση πρέπει να ορίσετε τη συνάρτηση δίνοντας ένα όνομα στη συνάρτηση. Η συνάρτηση μπορεί στη συνέχεια να οριστεί ως τύπος δεδομένων που υποδεικνύει τον τύπο δεδομένων που θέλετε να επιστρέψει η συνάρτηση.

Μπορεί να θέλετε να δημιουργήσετε μια συνάρτηση που επιστρέφει μια στατική τιμή κάθε φορά που καλείται - λίγο σαν μια σταθερά.

123 Λειτουργία GetValue () ως ακέραιοςGetValue = 50Λειτουργία Τέλους

Εάν επρόκειτο να εκτελέσετε τη συνάρτηση, η συνάρτηση θα επιστρέφει πάντα την τιμή 50.

Μπορείτε επίσης να δημιουργήσετε συναρτήσεις που αναφέρονται σε αντικείμενα στο VBA αλλά πρέπει να χρησιμοποιήσετε το Set Keyword για να επιστρέψετε την τιμή από τη συνάρτηση.

123 Λειτουργία GetRange () ως ΕύροςΟρισμός GetRange = Εύρος ("A1: G4")Λειτουργία Τέλους

Εάν χρησιμοποιούσατε την παραπάνω συνάρτηση στον κώδικα VBA, η συνάρτηση θα επέστρεφε πάντα το εύρος των κελιών A1 σε G4 σε όποιο φύλλο κι αν εργάζεστε.

Κλήση συνάρτησης από υποδιαδικασία

Μόλις δημιουργήσετε μια συνάρτηση, μπορείτε να την καλέσετε από οπουδήποτε αλλού στον κώδικά σας χρησιμοποιώντας μια διαδικασία Sub για να καλέσετε τη συνάρτηση.

Η τιμή των 50 θα επιστρέφεται πάντα.

Μπορείτε επίσης να καλέσετε τη λειτουργία GetRange από μια υποδιαδικασία.

Στο παραπάνω παράδειγμα, η συνάρτηση GetRange καλείται από τη διαδικασία Sub για να επισημάνει τα κελιά στο αντικείμενο εύρους.

Δημιουργία συναρτήσεων

Ενιαίο επιχείρημα

Μπορείτε επίσης να εκχωρήσετε μια παράμετρο ή παραμέτρους στη συνάρτηση σας. Αυτές οι παράμετροι μπορούν να αναφέρονται ως Επιχειρήματα.

123 Λειτουργία ConvertKilosToPounds (dblKilo ως Double) ως DoubleConvertKiloToPounds = dblKilo*2.2Λειτουργία Τέλους

Στη συνέχεια, μπορούμε να καλέσουμε την παραπάνω συνάρτηση από μια διαδικασία Sub, προκειμένου να υπολογίσουμε πόσα κιλά είναι μια συγκεκριμένη ποσότητα κιλών.

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

Στο παραπάνω παράδειγμα, έχουμε 2 διαδικασίες - καθεμία από αυτές χρησιμοποιεί τη Λειτουργία για να υπολογίσει την αξία της λίρας των κιλών που τους πέρασαν στο dblΚίλο Επιχείρημα της συνάρτησης.

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

Μπορείτε να δημιουργήσετε μια συνάρτηση με πολλαπλά ορίσματα και να μεταβιβάσετε τις τιμές στη συνάρτηση μέσω υποδιαδικασίας.

123 Λειτουργία CalculateDayDiff (Ημερομηνία 1 ως Ημερομηνία, Ημερομηνία 2 ως Ημερομηνία) ως ΔιπλήCalculateDayDiff = Date2-Date1Λειτουργία Τέλους

Στη συνέχεια, μπορούμε να καλέσουμε τη συνάρτηση για να υπολογίσουμε το ποσό των ημερών μεταξύ 2 ημερομηνιών.

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

Μπορείτε επίσης να περάσετε προαιρετικά ορίσματα σε μια συνάρτηση. Με άλλα λόγια, μερικές φορές μπορεί να χρειαστείτε το επιχείρημα και μερικές φορές όχι - ανάλογα με τον κώδικα με τον οποίο χρησιμοποιείτε τη λειτουργία.

123456 Λειτουργία CalculateDayDiff (Ημερομηνία 1 ως Ημερομηνία, Προαιρετική Ημερομηνία 2 ως Ημερομηνία) ως Διπλή«ελέγξτε για δεύτερο ραντεβού και αν όχι εκεί, κάντε την Ημερομηνία 2 ίση με τη σημερινή ημερομηνία.Αν Ημερομηνία2 = 0 τότε Ημερομηνία2 = Ημερομηνία«υπολογίστε τη διαφοράCalculateDayDiff = Date2-Date1Λειτουργία Τέλους

Προεπιλεγμένη τιμή ορίσματος

Μπορείτε επίσης να ορίσετε την προεπιλεγμένη τιμή των προαιρετικών ορισμάτων όταν δημιουργείτε τη συνάρτηση, έτσι ώστε αν ο χρήστης παραλείψει το όρισμα, η τιμή που έχετε ορίσει ως προεπιλογή θα χρησιμοποιηθεί αντ 'αυτού.

1234 Λειτουργία CalculateDayDiff (Ημερομηνία 1 ως Ημερομηνία, Προαιρετική Ημερομηνία 2 ως Ημερομηνία = "06/02/2020") ως Διπλή«υπολογίστε τη διαφοράCalculateDayDiff = Date2-Date1Λειτουργία Τέλους

ByVal και ByRef

Όταν μεταβιβάζετε τιμές σε μια συνάρτηση, μπορείτε να χρησιμοποιήσετε το ByVal ή ByRef λέξεις -κλειδιά. Εάν παραλείψετε κάποιο από αυτά, το ByRef χρησιμοποιείται ως προεπιλογή.

ByVal σημαίνει ότι περνάτε ένα αντίγραφο της μεταβλητής στη συνάρτηση, ενώ ByRef σημαίνει ότι αναφέρεστε στην αρχική τιμή της μεταβλητής. Όταν περνάτε ένα αντίγραφο της μεταβλητής (ByVal), η αρχική τιμή της μεταβλητής είναι ΔΕΝ αλλάζει, αλλά όταν αναφέρετε τη μεταβλητή, η αρχική τιμή της μεταβλητής αλλάζει από τη συνάρτηση.

1234 Λειτουργία GetValue (ByRef intA As Integer) Ως ακέραιοςintA = intA * 4GetValue = intAΛειτουργία Τέλους

Στην παραπάνω συνάρτηση, το ByRef θα μπορούσε να παραλειφθεί και η συνάρτηση θα λειτουργήσει με τον ίδιο τρόπο.

1234 Λειτουργία GetValue (intA As Integer) Ως ακέραιοςintA = intA * 4GetValue = intAΛειτουργία Τέλους

Για να καλέσετε αυτήν τη συνάρτηση, μπορούμε να εκτελέσουμε μια υπο-διαδικασία.

123456789 Sub TestValues ​​()Dim intVal ως ακέραιος"συμπληρώστε τη μεταβλητή με την τιμή 10intVal = 10"εκτελέστε τη συνάρτηση GetValue και εμφανίστε την τιμή στο άμεσο παράθυροDebug.Print GetValue (intVal)'δείξτε την τιμή της μεταβλητής intVal στο άμεσο παράθυροDebug.Print intValΤέλος υπο

Σημειώστε ότι τα παράθυρα εντοπισμού σφαλμάτων εμφανίζουν την τιμή 40 και τις δύο φορές. Όταν μεταβιβάζετε τη μεταβλητή IntVal στη συνάρτηση - η τιμή 10 περνά στη συνάρτηση και πολλαπλασιάζεται με 4. Χρησιμοποιώντας τη λέξη -κλειδί ByRef (ή παραλείποντας τη συνολικά), θα ΤΡΟΠΟΠΟΙΗΣΕ την τιμή της μεταβλητής IntVal. Αυτό εμφανίζεται όταν εμφανίζετε πρώτα το αποτέλεσμα της συνάρτησης στο άμεσο παράθυρο (40) και, στη συνέχεια, την τιμή της μεταβλητής IntVal στο παράθυρο εντοπισμού σφαλμάτων (επίσης 40).

Εάν ΔΕΝ θέλουμε να αλλάξουμε την τιμή της αρχικής μεταβλητής, πρέπει να χρησιμοποιήσουμε το ByVal στη συνάρτηση.

1234 Λειτουργία GetValue (ByVal intA As Integer) Ως ακέραιοςintA = intA * 4GetValue = intAΛειτουργία Τέλους

Τώρα αν καλέσουμε τη συνάρτηση από μια υπο-διαδικασία, η τιμή της μεταβλητής IntVal θα παραμείνει στο 10.

Λειτουργία εξόδου

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

12345678910111213 Λειτουργία FindNumber (strSearch As String) As IntegerDim i As Integer'βρόχος μέσα από κάθε γράμμα στη συμβολοσειράΓια i = 1 προς Len (strSearch)Αν το γράμμα είναι αριθμητικό, επιστρέψτε την τιμή στη συνάρτησηΕάν IsNumeric (Mid (strSearch, i, 1)) ΤότεFindNumber = Mid (strSearch, i, 1)«τότε βγείτε από τη συνάρτησηΛειτουργία εξόδουΤέλος εανΕπόμενοFindNumber = 0Λειτουργία Τέλους

Η παραπάνω συνάρτηση θα βροχήσει τη συμβολοσειρά που παρέχεται μέχρι να βρει έναν αριθμό και, στη συνέχεια, θα επιστρέψει αυτόν τον αριθμό από τη συμβολοσειρά. Θα βρει μόνο τον πρώτο αριθμό στη συμβολοσειρά όπως θα βρει τότε Εξοδος η λειτουργία.

Η παραπάνω συνάρτηση μπορεί να κληθεί από μια ρουτίνα Sub όπως αυτή που ακολουθεί.

1234567 Sub CheckForNumber ()Dim NumIs ως ακέραιος«περάστε μια συμβολοσειρά κειμένου στη συνάρτηση εύρεσης αριθμούNumIs = FindNumber ("Upper Floor, 8 Oak Lane, Texas")«εμφανίστε το αποτέλεσμα στο άμεσο παράθυροDebug.Print NumIsΤέλος υπο

Χρήση μιας συνάρτησης μέσα από ένα φύλλο Excel

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

Κάνε κλικ στο fx για να εμφανιστεί το παράθυρο διαλόγου Εισαγωγή συνάρτησης.

Επιλέγω Ορισμένο από τον χρήστη από τη λίστα κατηγοριών

Επιλέξτε τη λειτουργία που θέλετε από τη διαθέσιμη Λειτουργίες καθορισμένες από το χρήστη (UDF).

Εναλλακτικά, όταν ξεκινάτε να γράφετε τη συνάρτηση σας στο Excel, η συνάρτηση θα εμφανίζεται στην αναπτυσσόμενη λίστα συναρτήσεων.

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

123 Ιδιωτική συνάρτηση CalculateDayDiff (Ημερομηνία 1 ως Ημερομηνία, Ημερομηνία 2 ως Ημερομηνία) ως ΔιπλήCalculateDayDiff = Date2-Date1Λειτουργία Τέλους

Δεν θα εμφανίζεται πλέον στην αναπτυσσόμενη λίστα με τις διαθέσιμες λειτουργίες του Excel.

Ωστόσο, είναι αρκετά ενδιαφέρον, ωστόσο, μπορείτε ακόμα να χρησιμοποιήσετε τη λειτουργία - απλώς δεν θα εμφανιστεί στη λίστα όταν την αναζητάτε!

Εάν έχετε δηλώσει το δεύτερο επιχείρημα ως Προαιρετικός, μπορείτε να το παραλείψετε μέσα στο φύλλο Excel καθώς και στον κώδικα VBA.

Μπορείτε επίσης να χρησιμοποιήσετε μια συνάρτηση που έχετε δημιουργήσει χωρίς ορίσματα στο φύλλο Excel.

Θα βοηθήσει στην ανάπτυξη του τόπου, μοιράζονται τη σελίδα με τους φίλους σας

wave wave wave wave wave