Questa è una delle domande più frequenti nelle interviste VBA. In questo articolo impareremo qual è la differenza tra gli argomenti ByVal e ByRef in Excel VBA.

Definizioni:

Argomento ByRef: è la forma abbreviata letterale di per riferimento. Quando un argomento viene passato come argomento ByRef a un diverso sub o funzione, viene inviato il riferimento della variabile effettiva. Qualsiasi modifica apportata alla copia della variabile si rifletterà nell’argomento originale.

Possiamo dire che, invece del valore, la posizione del valore viene inviata alla funzione utilizzando ByRef a una funzione.

Questo è l’argomento predefinito in VBA. Non è necessario scrivere ByRef prima dell’argomento.

Sintassi:

Sub x (a as Variant)

‘Or Sub x (ByRef a as Variant)

Argomento ByVal: è una forma abbreviata letterale di per valore. Quando un argomento viene passato come argomento ByVal a una funzione secondaria o diversa, viene inviato solo il valore dell’argomento. L’argomento originale viene lasciato intatto. Qualsiasi modifica apportata alla funzione o al sottotitolo esterno non si rifletterà nell’argomento originale.

Per dichiarare un argomento come ByVal è necessario utilizzare la parola chiave ByVal prima dell’argomento.

Sintassi:

Sub x (ByVal a as Variant)

Ora conosciamo le definizioni. Vediamo un esempio e finiamola.

ByRef Example Ecco un semplice programma.

Sub X(ByRef a As Variant)

a = 20

Debug.Print "in sub X value of a = " & a

End Sub

Sub Y()

a = 10

Call X(a)

Debug.Print "in sub Y value of a = " & a

End Sub

Quindi, qui abbiamo due subroutine. Il primo sottotitolo è X che accetta un argomento variante come ByRef. (Puoi omettere la parola chiave ByRef. È l’impostazione predefinita.)

Successivamente, imposta il valore di a = 20 end quindi stampa il valore di a.

Sub Y è la subroutine principale che chiama la subroutine X. Imposta il valore di a = 10 quindi chiama la subroutine X e passa a un argomento.

Quindi stampa il valore di a in Y.

Ora quando esegui Sub Y questo è l’output che ottieni.

in sub X valore di a = 20 in sub Y valore di a = 20

0046

Conclusione: il valore dell’originale a viene modificato da sub X e impostato a 20 per entrambi i sottotitoli. puoi vedere che quando viene eseguito Sub Y, il valore iniziale di a era 10. Y chiama X (a). X imposta il valore di a = 20. Stampa “nel valore sub X di a = 20”.

Il controllo torna su y e stampa nel valore sub Y di a = 20.

Questo è l’effetto dell’argomento ByRef.

ByVal Esempio:

Questo è un esempio ByVal

Sub X(ByVal a As Variant)

a = 20

Debug.Print "in sub X value of a = " & a

End Sub

Sub Y()

a = 10

Call X(a)

Debug.Print "in sub Y value of a = " & a

End Sub

Entrambi gli esempi sono gli stessi con la sola differenza di passaggio di argomenti.

Qui in X, gli argomenti sono dichiarati come ByVal. Quando esegui la subroutine Y questa volta l’output è:

in sub X valore di a = 20 in sub Y valore di a = 10

0047

Conclusione: il valore dell’originale a NON viene modificato dal sub X. È 20 per X e 10 per Y. Quando Y chiama X con a, invia solo il valore di a e non l’indirizzo di a.

Quindi qualsiasi modifica apportata in a non si riflette nella variabile originale.

Per test, se stampa il valore di a in X prima di impostarlo su 20, stamperà 10. Perché il 10 viene passato a a in X usando byVal. Usando ByRef hai inviato un di Y a un di X.

0048

È una domanda facile, ma molti di noi lo confondono, nella domanda dell’intervista vba. Il motivo è che non riusciamo a usarlo molto. Il più delle volte copiamo il valore in una variabile diversa. * Quindi sì ragazzi, questa è la differenza tra gli argomenti ByRef e ByVal in Excel VBA. Fammi sapere se hai qualche dubbio su questo argomento o su qualsiasi altro argomento VBA o Excel. La sezione commenti è tutta tua.

Articoli correlati:

link: / files-cartella-di lavoro-e-fogli di lavoro-in-vba-cancella-fogli-senza-richieste-di-conferma-usando-vba-in-microsoft-excel [Elimina fogli senza richieste di conferma usando VBA in Microsoft Excel]

link: / files-workbook-and-worksheets-in-vba-add-and-save-new-workbook-using-vba-in-microsoft-excel [Aggiungi e salva una nuova cartella di lavoro usando VBA in Microsoft Excel 2016]

link: / menu-barre degli strumenti-barra di stato-in-vba-mostra-un-messaggio-sulla-barra di stato-utilizzando-vba-in-microsoft-excel [Visualizza un messaggio sulla barra di stato VBA di Excel]

link: / general-topics-in-vba-turn-off-warning-messages-using-vba-in-microsoft-excel [Disattiva i messaggi di avviso usando VBA in Microsoft Excel 2016]

Articoli popolari:

link: / formule-e-funzioni-introduzione-di-vlookup-funzione [La funzione CERCA.VERT in Excel]

link: / tips-countif-in-microsoft-excel [CONTA.SE in Excel 2016]

link: / excel-formula-and-function-excel-sumif-function [Come usare la funzione SUMIF in Excel]