VBA ByRef

Argomento della funzione ByRef VBA di Excel

ByRef in VBA è una funzione chiamata per riferimento in cui forniamo un riferimento a qualsiasi argomento nel nostro codice, quando creiamo funzioni personalizzate e vogliamo utilizzare il valore di qualsiasi variabile definita in precedenza prima della funzione che usiamo la funzione ByRef, la la sintassi da utilizzare è semplice come Function Function-Name (ByRef Variable as Data Type).

Utilizzando Byref possiamo puntare al valore della variabile originale senza alterare il valore della variabile. È come passare il valore della variabile direttamente alla sottoprocedura VBA o alla funzione VBA.

Come passare l'argomento utilizzando VBA ByRef Argument?

Puoi scaricare questo modello VBA ByRef Excel qui - Modello VBA ByRef Excel

Esempio 1

Per un esempio, guarda il codice VBA sottostante.

Codice1:

 Sub Procedure1 () Dim k As Integer k = 50 Procedure2 k MsgBox k End Sub 

Codice2:

 Sub Procedura2 (ByRef k As Integer) k = k + 10 End Sub 

Nella prima procedura, ho dichiarato la variabile "k" come Integer.

Quindi ho assegnato il valore a questa variabile come 50.

Dopo di che ho aggiunto una nuova riga, ad es

Procedura2 k

Questo è il secondo nome della procedura. In questa procedura, ho dichiarato la variabile tra parentesi come String in VBA ma ho usato la parola "ByRef".

 ByRef k As Integer 

Qui ho assegnato il valore della variabile “k” as

k = k + 10

Ok, ora eseguirò il codice passo dopo passo premendo il tasto F8.

Premere il tasto F8 altre due volte e posizionare un cursore sulla variabile "k" per vedere il valore della variabile "k".

Dato che abbiamo assegnato il valore come 50, mostra il valore come 50. Ora ha evidenziato la riga Procedure2 k che è il nome della seconda procedura.

Se premo ora il tasto F8, uscirà dalla procedura corrente e passerà alla seconda procedura.

Ora poiché abbiamo usato la parola ByRef, ha portato il valore della variabile "k" dalla procedura sopra.

Premere due volte il tasto F8 per tornare alla sottoprocedura precedente. Se noti nella seconda procedura ho applicato la formula come k = k + 10. cioè il valore "k" è 50 quindi aggiunge 10 in più a quello cioè 60 in totale.

Ora il codice è in esecuzione nella prima procedura e in questa procedura il valore della variabile "k" è 50. Ma premere il tasto F8 e vedere il risultato in una finestra di messaggio.

Abbiamo ottenuto il risultato come 60 invece del valore predefinito di 50 in questa procedura.

Il motivo per cui abbiamo ottenuto 60 perché nella seconda procedura abbiamo applicato "ByRef" quindi, ha portato il risultato dell'equazione (k = k + 10) alla procedura corrente.

Qui il valore della prima variabile "k" è 50 e nella seconda procedura il valore della variabile "k" è k + 10, cioè 60 che viene portato alla prima procedura.

Nella prima procedura il valore originale della variabile “k” era 50, quindi By Ref ha cambiato il valore originale da 50 a 60 eseguendo l'equazione k = k + 10 cioè k = 50 +10 = 60.

Esempio n. 2

Ora dai un'occhiata a un altro esempio.

Codice 1:

 Sub P1 () Dim MyNumber As Long MyNumber = 1 Call Change_ByRef (MyNumber) 'MyNumber viene modificato dalla procedura Change_ByRef MsgBox "My Number is now:" & MyNumber End Sub 

Codice 2:

 Sub Change_ByRef (ByRef NewNumber As Long) NewNumber = 14 End Sub 

Funziona esattamente come il codice precedente.

Inizialmente, il valore della variabile "MyNumber" è 1. Quindi chiamiamo la procedura seguente con il suo nome

 Chiama Change_ByRef (MyNumber)

In quella procedura, il valore della variabile è 14.

Quindi, quando torna alla procedura precedente, assegnerà il nuovo valore alla variabile come 14.