Dit is een van de meest gestelde vragen in VBA-interviews. In dit artikel zullen we leren wat het verschil is tussen ByVal- en ByRef-argumenten in Excel VBA.
definities:
DoorRef argument: Het is de letterlijke korte vorm van door verwijzing. Wanneer een argument als ByRef-argument wordt doorgegeven aan een andere sub of functie, wordt de referentie van de werkelijke variabele verzonden. Alle wijzigingen die zijn aangebracht in de kopie van de variabele, worden weergegeven in het oorspronkelijke argument.
We kunnen zeggen dat, in plaats van waarde, de locatie van waarde naar functie wordt verzonden met ByRef naar een functie.
Dit is het standaardargument in VBA. We hoeven ByRef niet voor het argument te schrijven.
Syntaxis:
Sub x(a als variant)
'Of
Sub x(ByRef a as Variant)
ByVal-argument: Het is een letterlijke korte vorm van op waarde. Wanneer een argument als ByVal-argument wordt doorgegeven aan een andere sub of functie, wordt alleen de waarde van het argument verzonden. Het oorspronkelijke argument blijft intact. Alle wijzigingen die zijn aangebracht in de vreemde functie of sub worden niet weergegeven in het oorspronkelijke argument.
Om een argument als ByVal te declareren, moet u het ByVal-sleutelwoord vóór het argument gebruiken.
Syntaxis:
Sub x(ByVal a als variant)
Nu kennen we de definities. Laten we een voorbeeld bekijken en ermee doorgaan.
DoorRef Voorbeeld
Hier is een eenvoudig programma.
Sub X (ByRef a As Variant) a = 20 Debug.Print "in sub X-waarde van a = " & a Einde Sub Sub Y() a = 10 Bel X(a) Debug.Print "in sub Y-waarde van a = " & a Einde sub
Dus hier hebben we twee subroutines. Eerste sub is X die een variantargument als . heeft DoorRef.
(U kunt het ByRef-sleutelwoord weglaten. Dit is de standaardinstelling.)
Vervolgens wordt de waarde van . ingesteld a = 20 end drukt vervolgens de waarde van a af.
Sub Y is de hoofdsubroutine die subroutine aanroept x. Het stelt de waarde van a=10 roept vervolgens subroutine X aan en geeft dooreen als argument. Dan drukt het de waarde af van een in Y.
Als u nu Sub Y uitvoert, is dit de uitvoer die u krijgt.
in sub X waarde van a = 20
in sub Y-waarde van a = 20
Conclusie: De waarde van origineel a wordt gewijzigd door sub X en voor beide subs op 20 gezet.
je kunt zien dat wanneer Sub Y wordt uitgevoerd, de beginwaarde van a 10 was. Y roept X(a) op. X stelt de waarde van a=20 in. Het drukt "in sub X-waarde van a = 20" af. De besturing gaat terug naar y en drukt af in een sub-Y-waarde van a = 20.
Dit is het effect van het ByRef-argument.
ByVal-voorbeeld:
Dit is een ByVal-voorbeeld
Sub X (ByVal a As Variant) a = 20 Debug.Print "in sub X-waarde van a = " & a Einde Sub Sub Y() a = 10 Bel X(a) Debug.Print "in sub Y-waarde van a = " & a Einde sub
Beide voorbeelden zijn hetzelfde met het enige verschil in het doorgeven van argumenten. Hier in X worden argumenten gedeclareerd als ByVal. Wanneer u deze keer een Y-subroutine uitvoert, is de uitvoer:
in sub X waarde van a = 20
in sub Y-waarde van a = 10
Conclusie: De waarde van origineel a wordt NIET gewijzigd door sub X. Het is 20 voor X en 10 voor Y.
Als Y X aanroept met a, wordt alleen de waarde van a verzonden, niet het adres van a. Daarom wordt elke wijziging in a niet weerspiegeld in de oorspronkelijke variabele.
Voor test, als afdrukwaarde van een in X voordat het wordt ingesteld op 20, wordt 10 afgedrukt. Omdat de 10 wordt doorgegeven aan een in X met byVal. Met ByRef die je hebt verzonden een van Y tot een van X.
Het is een gemakkelijke vraag, maar velen van ons verwarren dit, in vba-interviewvraag. De reden is dat we het niet veel kunnen gebruiken. Meestal kopiëren we de waarde in een andere variabele.
Dus ja jongens, dit is het verschil tussen ByRef en ByVal argumenten in Excel VBA. Laat het me weten als je twijfels hebt over dit onderwerp of een ander VBA- of Excel-onderwerp. Het opmerkingengedeelte is helemaal van jou.
Nieuwe werkmap toevoegen en opslaan met VBA in Microsoft Excel 2016
Geef een bericht weer op de Excel VBA-statusbalk
Schakel waarschuwingsberichten uit met VBA in Microsoft Excel 2016
Populaire artikels:
De VERT.ZOEKEN-functie in Excel
AANTAL.ALS in Excel 2016
Hoe de SUMIF-functie in Excel te gebruiken?