VBA ByVal - Πώς να χρησιμοποιήσετε το ByVal Function Argument; (Παραδείγματα)

Επιχειρησιακό επιχείρημα Excel VBA ByVal

Το ByVal είναι μια δήλωση στο VBA. Το ByVal σημαίνει By Value, δηλαδή όταν η υποδιαδικασία καλείται από τη διαδικασία, η τιμή των μεταβλητών επανέρχεται στη νέα τιμή από τη νέα διαδικασία που καλείται.

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

Ξέρω ότι δεν είναι εύκολο να γίνει κατανοητό διαβάζοντας την εξήγηση, αλλά με πρακτικά παραδείγματα λειτουργίας, μπορούμε πραγματικά να κατανοήσουμε καλύτερα.

Πώς να χρησιμοποιήσετε το ByVal Argument στο VBA;

Παράδειγμα # 1

Για παράδειγμα, δείτε τους παρακάτω κωδικούς VBA.

Κώδικας:

Sub Macro1 () Dim k As Integer k = 50 Macro2 k MsgBox k End Sub
Υπο Macro2 (ByVal k As Integer) k = k + 5 End Sub

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

Στην πρώτη μακροεντολή, έχουμε αντιστοιχίσει την τιμή 50 στη μεταβλητή "k".

Dim k As Integer k = 50

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

Μακροεντολή 2 k

Στο Macro2, έχουμε επαναφέρει την τιμή της μεταβλητής σε k = k + 5. Σε αυτήν τη μακροεντολή, χρησιμοποιήσαμε το όρισμα ByVal για να αντιστοιχίσουμε την τιμή στη μεταβλητή "k".

Τώρα για να κατανοήσουμε το "ByVal", ας τρέξουμε τον κωδικό γραμμής VBA ανά γραμμή πατώντας το πλήκτρο F8.

# 1 - Αφού πατήσετε πρώτα το πλήκτρο F8, θα επισημανθεί η πρώτη γραμμή του Macro1.

Σε αυτό το χρονικό σημείο, τοποθετήστε έναν κέρσορα στη μεταβλητή "k" και θα πρέπει να δείχνει την τιμή της μεταβλητής "k".

Προς το παρόν, η τιμή του "k" είναι μηδέν.

# 2 - Πατήστε το πλήκτρο F8 για άλλη μια φορά και θα μεταβεί στην τρίτη γραμμή.

Ακόμα και τώρα, η τιμή του "k" είναι ακόμα μηδέν.

# 3 - Πατήστε το πλήκτρο F8 τώρα και δείτε την τιμή του k.

Δεδομένου ότι η τιμή "k" ορίζεται σε 50 και ο κώδικας εκτελείται και έτσι η τιμή εμφανίζεται ως 50.

# 4 - Τώρα, η επισημασμένη γραμμή είναι "Macro2 k", δηλαδή, πατώντας το πλήκτρο F8, θα μεταβεί στη δεύτερη διαδικασία, το Macro2.

# 5 - Ακόμα και τώρα, η τιμή της μεταβλητής "k" σε αυτήν τη διαδικασία εμφανίζεται επίσης ως 50. Αλλά μέσα σε αυτήν τη μακροεντολή, επαναφέρουμε την τιμή της μεταβλητής "k" ως k = k + 5 δηλαδή, 55. Τώρα πατήστε το Πλήκτρο F8 δύο ακόμη φορές.

Όπως βλέπετε παραπάνω, η τιμή "k" είναι 55 τώρα.

# 6 - Πατήστε το πλήκτρο F8 και θα επιστρέψει στη διαδικασία Macro1.

Όταν η μακροεντολή επέστρεψε στην αρχική διαδικασία Macro1, η τιμή μεταβλητής "k" δεν είναι πλέον 55 αλλά η αρχική τιμή σε αυτήν τη διαδικασία, δηλαδή 50.

Όταν πατάτε το πλήκτρο F8, μπορούμε να δούμε μόνο 50 στο πλαίσιο μηνυμάτων στο VBA.

Έτσι, όπως είπαμε στην αρχή του άρθρου, το όρισμα "ByVal" δεν μεταφέρει τιμές από τη μία διαδικασία στην άλλη, παρόλο που μεταφέρει την τιμή της μεταβλητής από την πρώτη μακροεντολή στη δεύτερη τη στιγμή που συναντά τη γραμμή " ByVal "όταν επιστρέφει στην αρχική μακροεντολή επαναφέρει την τιμή στην αρχική τιμή μόνο στη διαδικασία.

Παράδειγμα # 2

Τώρα ρίξτε μια ματιά στις παρακάτω δύο μακροεντολές.

Κώδικας:

Sub P1 () Dim k As Integer: k = 10 Call P2 (k) MsgBox k End Sub
Sub P2 (ByVal k As Integer) k = 15 End Sub
  • Αυτό είναι παρόμοιο με το πρώτο παράδειγμα. Στη μακροεντολή "P1" , έχουμε αντιστοιχίσει την τιμή 10 στη μεταβλητή "k" και στην ίδια μακροεντολή "P1" , ονομάσαμε τη δεύτερη μακροεντολή "P2" με τη μεταβλητή "k".
  • Στη δεύτερη μακροεντολή "P2" , χρησιμοποιήσαμε το όρισμα ByVal και αυτή τη φορά, η τιμή της μεταβλητής "k" είναι 15.

Αυτή η μακροεντολή μεταφέρει την τιμή της μεταβλητής "k" ως δέκα από τη μακροεντολή "P1" έως τη μακροεντολή "P2" και σε αυτήν τη μακροεντολή, η τιμή θα επαναφερθεί σε 15, αλλά τη στιγμή που θα επιστρέψει για να ολοκληρώσει τη μακροεντολή στην πρώτη μακροεντολή "P1" η τιμή του "k" πίσω στο 10, όχι στο 15.

Πράγματα που πρέπει να θυμάστε

Το όρισμα ByVal δεν επηρεάζει την τιμή της μεταβλητής ακόμη και μετά την εκτέλεση της μακροεντολής, αλλά με το όρισμα By Ref, μπορούμε να μεταφέρουμε την τιμή της μεταβλητής από τη μία μακροεντολή στην άλλη.

ενδιαφέροντα άρθρα...