/ / Excel VBA ByRef e ByVal

Excel VBA ByRef e ByVal

È possibile passare argomenti a una procedura (funzione o sub) come riferimento o in base al valore. Di default, Excel VBA passa argomenti per riferimento. Come sempre, useremo un semplice esempio per rendere le cose più chiare.

Inserire un pulsante di comando nel foglio di lavoro e aggiungere le seguenti linee di codice:

Dim x As Integer
x = 10

MsgBox Triple(x)
MsgBox x

Il codice chiama la funzione Triple. È il risultato del secondo MsgBox a cui siamo interessati. Le funzioni devono essere inserite in un modulo.

1. Aprire Visual Basic Editor e fare clic su Inserisci, Modulo.

2. Aggiungi le seguenti linee di codice:

Function Triple(ByRef x As Integer) As Integer

x = x * 3
Triple = x

End Function

Risultato quando si fa clic sul pulsante di comando sul foglio:

Risultato ByRef

Risultato ByRef

3. Sostituire ByRef con ByVal.

Function Triple(ByVal x As Integer) As Integer

x = x * 3
Triple = x

End Function

Risultato quando si fa clic sul pulsante di comando sul foglio:

Risultato ByVal

Risultato ByVal

Spiegazione: Quando si passano gli argomenti per riferimento, si fa riferimento al valore originale. Il valore di x (il valore originale) viene modificato nella funzione. Di conseguenza, la seconda MsgBox visualizza un valore di 30. Quando si passano gli argomenti in base al valore, si passa una copia alla funzione. Il valore originale non è cambiato. Di conseguenza, la seconda MsgBox visualizza un valore di 10 (il valore originale).

Leggi anche: