Αυτή είναι μια από τις πιο συχνές ερωτήσεις στις συνεντεύξεις VBA. Σε αυτό το άρθρο θα μάθουμε ποια είναι η διαφορά μεταξύ των επιχειρημάτων ByVal και ByRef στο excel VBA.
Ορισμοί:
Όρισμα ByRef: Είναι η κυριολεκτικά σύντομη μορφή της παραπομπής. Όταν ένα όρισμα μεταβιβάζεται ως όρισμα ByRef σε διαφορετική υπο -συνάρτηση, αποστέλλεται η αναφορά της πραγματικής μεταβλητής. Τυχόν αλλαγές που γίνονται στο αντίγραφο της μεταβλητής, θα αντικατοπτρίζονται στο αρχικό όρισμα.
Μπορούμε να πούμε ότι, αντί για τιμή, η θέση της τιμής αποστέλλεται στη λειτουργία χρησιμοποιώντας ByRef σε μια συνάρτηση.
Αυτό είναι το προεπιλεγμένο όρισμα στο VBA. Δεν χρειάζεται να γράψουμε ByRef πριν από το επιχείρημα.
Σύνταξη:
Υπο x (a ως παραλλαγή)
'Ή
Sub x (ByRef a as Variant)
Όρισμα ByVal: Είναι κυριολεκτικά σύντομη μορφή κατά αξία. Όταν ένα όρισμα μεταβιβάζεται ως όρισμα ByVal σε διαφορετικό υποσύστημα ή συνάρτηση, αποστέλλεται μόνο η τιμή του ορίσματος. Το αρχικό επιχείρημα παραμένει άθικτο. Τυχόν αλλαγές που πραγματοποιούνται σε ξένη συνάρτηση ή δευτερεύοντα στοιχείο δεν θα αντικατοπτρίζονται στο αρχικό όρισμα.
Για να δηλώσετε ένα όρισμα ως ByVal πρέπει να χρησιμοποιήσετε τη λέξη -κλειδί ByVal πριν από το όρισμα.
Σύνταξη:
Sub x (ByVal a as Variant)
Τώρα γνωρίζουμε τους ορισμούς. Ας δούμε ένα παράδειγμα και ας το ξεπεράσουμε.
Παράδειγμα ByRef
Εδώ είναι ένα απλό πρόγραμμα.
Sub X (ByRef a As Variant) a = 20 Debug.Print "in sub X value of a =" & a Τέλος υποδιαιρέσεως Υ () a = 10 Κλήση X (α) Debug.Print "σε τιμή υπο Υ του a =" & a Τέλος υπο
Έτσι, εδώ έχουμε δύο υπορουτίνες. Το πρώτο δευτερεύον είναι το Χ που παίρνει ένα όρισμα παραλλαγής ως ByRef.
(Μπορείτε να παραλείψετε τη λέξη -κλειδί ByRef. Είναι η προεπιλογή.)
Στη συνέχεια, ορίζει την τιμή του α = 20 end και μετά εκτυπώνει την τιμή του a.
Υπο Υ είναι η κύρια υπορουτίνα που καλεί υπορουτίνα ΧΤο Ορίζει την τιμή του α = 10 στη συνέχεια καλεί υπορουτίνα Χ και περνάένα ως επιχείρημα. Στη συνέχεια, εκτυπώνει την αξία του ένα στο Υ.
Τώρα, όταν εκτελείτε το Sub Y, αυτή είναι η έξοδος που λαμβάνετε.
σε υπο X τιμή a = 20
σε τιμή υπο Υ του a = 20
Συμπέρασμα: Η τιμή του αρχικού a αλλάζει κατά το υπο X και ορίζεται σε 20 για αμφότερους τους δευτερεύοντες.
μπορείτε να δείτε ότι όταν εκτελείται το Sub Y, η αρχική τιμή του a ήταν 10. Το Y καλεί το X (a). Το X θέτει τιμή a = 20. Εκτυπώνει "σε υπο X τιμή a = 20". Το στοιχείο ελέγχου επιστρέφει στο y και εκτυπώνει σε τιμή υπο Υ του a = 20.
Αυτό είναι το αποτέλεσμα του ορίσματος ByRef.
Παράδειγμα ByVal:
Αυτό είναι ένα Παράδειγμα ByVal
Sub X (ByVal a As Variant) a = 20 Debug.Print "in sub X value of a =" & a Τέλος υποδιαιρέσεως Υ () a = 10 Κλήση X (α) Debug.Print "σε τιμή υπο Υ του a =" & a Τέλος υπο
Και τα δύο παραδείγματα είναι ίδια με τη μόνη διαφορά στο πέρασμα του επιχειρήματος. Εδώ στο Χ, τα ορίσματα δηλώνονται ως ByVal. Όταν εκτελείτε υπορουτίνα Y αυτή τη φορά, η έξοδος είναι:
σε υπο X τιμή a = 20
σε τιμή υπο Υ του a = 10
Συμπέρασμα: Η τιμή του αρχικού a ΔΕΝ αλλάζει κατά το υπο X. Είναι 20 για X και 10 για Y.
Όταν το Y καλεί το X με a, στέλνει μόνο την τιμή του a όχι τη διεύθυνση του a. Επομένως, οποιαδήποτε αλλαγή που γίνεται στο a δεν αντικατοπτρίζεται στην αρχική μεταβλητή.
Για δοκιμή, εάν η τιμή εκτύπωσης είναι ένα στο Χ πριν το ρυθμίσετε στο 20, θα εκτυπώσει 10. Επειδή το 10 περνά σε ένα σε Χ χρησιμοποιώντας byVal. Χρησιμοποιώντας το ByRef που στείλατε α του Υ προς το α του Χ.
Είναι μια εύκολη ερώτηση, αλλά πολλοί από εμάς συγχέουμε αυτό, σε ερώτηση συνέντευξης vba. Ο λόγος είναι ότι δεν το χρησιμοποιούμε πολύ. Τις περισσότερες φορές αντιγράφουμε την τιμή σε διαφορετική μεταβλητή.
Λοιπόν, ναι, αυτή είναι η διαφορά μεταξύ των επιχειρημάτων ByRef και ByVal στο excel VBA. Ενημερώστε με, εάν έχετε οποιαδήποτε αμφιβολία σχετικά με αυτό το θέμα ή οποιοδήποτε άλλο θέμα VBA ή Excel. Η ενότητα σχολίων είναι όλη δική σας.
Προσθήκη και αποθήκευση νέου βιβλίου εργασίας χρησιμοποιώντας το VBA στο Microsoft Excel 2016
Εμφάνιση μηνύματος στη γραμμή κατάστασης του Excel VBA
Απενεργοποιήστε τα μηνύματα προειδοποίησης χρησιμοποιώντας το VBA στο Microsoft Excel 2016
Δημοφιλή άρθρα:
Η συνάρτηση VLOOKUP στο Excel
COUNTIF στο Excel 2016
Πώς να χρησιμοποιήσετε τη συνάρτηση SUMIF στο Excel