Qual è la differenza tra gli argomenti ByRef e ByVal? - Domanda di intervista VBA

Sommario:

Anonim

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 breve letterale di per riferimento. Quando un argomento viene passato come argomento ByRef a una sub o funzione diversa, viene inviato il riferimento della variabile effettiva. Qualsiasi modifica apportata alla copia della variabile si rifletterà nell'argomento originale.
Possiamo dire che, invece di valore, la posizione di 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 come variante)

'O

Sub x(ByRef a come variante)

Argomento ByVal: È una forma breve letterale di per valore. Quando un argomento viene passato come argomento ByVal a un sub o a una funzione diversa, viene inviato solo il valore dell'argomento. L'argomento originale è rimasto intatto. Eventuali modifiche apportate alla funzione esterna o sub non si rifletteranno nell'argomento originale.
Per dichiarare un argomento come ByVal è necessario utilizzare la parola chiave ByVal prima dell'argomento.
Sintassi:
Sub x(ByVal a come variante)
Ora conosciamo le definizioni. Vediamo un esempio e facciamola finita.

ByRef Esempio

Ecco un semplice programma.

Sub X (per riferimento a come variante) a = 20 Debug.Print "in sub X value di a = " & a Fine Sub Sub Y() a = 10 Chiama X(a) Debug.Print "in sub Y value di a = " & a Fine sottotitolo 

Quindi, qui abbiamo due subroutine. Il primo sottotitolo è X che accetta un argomento variante come DaRif.
(Puoi omettere la parola chiave ByRef. È l'impostazione predefinita.)
Successivamente, sta impostando il valore di a = 20 end quindi stampa il valore di a.

Subè la subroutine principale che chiama subroutine X. Imposta il valore di a=10 quindi chiama la subroutine X e passaun come argomento. Quindi stampa il valore di un in Y.

Ora, quando esegui Sub Y, questo è l'output che ottieni.
in sub X valore di a = 20

nel valore sub Y di a = 20

Conclusione: il valore dell'originale a viene modificato da sub X e impostato su 20 per entrambi i sub.
puoi vedere che quando Sub Y viene eseguito, il valore iniziale di a era 10. Y chiama X(a). X imposta il valore di a=20. Stampa "in 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 di ByVal

Sub X(ByVal a As Variant) a = 20 Debug.Print "in sub X value di a = " & a Fine Sub Sub Y() a = 10 Chiama X(a) Debug.Print "in sub Y value di a = " & a Fine sottotitolo

Entrambi gli esempi sono gli stessi con l'unica differenza nel passaggio degli argomenti. Qui in X, gli argomenti sono dichiarati come ByVal. Quando si esegue la subroutine Y questa volta l'output è:

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


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 non l'indirizzo di a. Quindi qualsiasi modifica apportata in a non si riflette nella variabile originale.

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

È una domanda facile, ma molti di noi lo confondono, nella domanda dell'intervista vba. Il motivo è che non possiamo usarlo molto. La maggior parte 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 dubbi su questo argomento o su qualsiasi altro argomento VBA o Excel. La sezione dei commenti è tutta tua.

Aggiungi e salva una nuova cartella di lavoro utilizzando VBA in Microsoft Excel 2016

Visualizza un messaggio sulla barra di stato VBA di Excel

Disattiva i messaggi di avviso utilizzando VBA in Microsoft Excel 2016

Articoli popolari:

La funzione CERCA.VERT in Excel

CONTA.SE in Excel 2016

Come utilizzare la funzione SOMMA.SE in Excel